代码改变世界

SharePoint 2010 JavaScript技巧两则

2012-07-06 11:29 by Windie Chai, ... 阅读, ... 评论, 收藏, 编辑

SharePoint开发,从某种程度上,也可以认为是Web开发,所以也就不可避免的要使用JavaScript,本文就来介绍SharePoint 2010上的两则JavaScript小技巧。

1.禁用Ribbon,保留导航

SharePoint 2010在UI上最大的变化就是和Office一致的Ribbon界面,Ribbon虽然有各种好处,但对于有些类型的网站(譬如面向互联网的网站)来说,Ribbon可能一个令人困扰的东西,那么我们怎么去掉Ribbon呢?

首先,我们可以观察到,Ribbon分为两个部分,一部分是上方的Tab,它是一个id为“s4-ribbonrow”的div;另一部分是下面的容器(包含导航和实际的操作按钮),它是一个id为“s4-titlerow”的div。

对于s4-ribbonrow来说,我们可以直接将其隐藏。但对于s4-titlerow来说,直接隐藏却不是一个很好的方法。一来s4-titlerow还包含这导航,二来就算隐藏了,我们的一些触发Ribbon Tab切换的操作(譬如选中某个条目)依然会让Ribbon显示出来,所以我们需要另外一种方法。

通过跟踪Ribbon相关的JavaScript代码可以发现,触发Ribbon Tab切换的所有事件都会调用一个叫做“_ribbonStartInit”的方法,而且大多数调用之前都会判断_ribbonStartInit的存在性以及类型(只有直接点击Ribbon Tab时不会判断,但Ribbon Tab已经通过s4-ribbonrow隐藏了,所以不会出现脚本错误),所以我们可以将这个变量去掉或者换一个类型,这样切换Ribbon的代码就无法继续执行,Ribbon也就相当于被禁用了,如下面的代码所示:

_ribbonStartInit = "Ribbon Disabled";

 

2.让Rating只读

Rating也是SharePoint 2010新增的一个功能,但这个功能一旦启用之后,便对所有用户开放,哪怕是只有查看权限的用户也可以进行打分。有时候我们并不喜欢这种默认行为,而是想让Rating信息对某些用户只读,想要实现这个功能,我们先来分析一下Rating控件。

SharePoint 2010的Rating控件会Render成一个span,它的ID以“RatingsCtrl_”开头,内部包含一个a和一个span。除此之外,每一个Rating控件都会在页面上注册一段JavaScript,用来初始化一个RatingsControl对象,而这个对象在初始化的时候又会向Rating控件这个span添加一些事件绑定(mouseover、mouseout、keypress)。

所以我们只需要把这个span上的这几个事件绑定去掉,就可以让Rating控件变为只读了,如下面的代码所示:

function ids_ratingDisabling(){{
 
var rc =$get('Rating控件ID');
 
if(rc != null)
 
$clearHandlers(rc);
 
}}
 
_spBodyOnLoadFunctionNames.push('ids_ratingDisabling');

 

如果页面上有多个Rating控件,可以想办法先把这些控件都找出来,然后遍历它们依次执行$clearHandlers方法。

需要注意的是Rating控件注册的JavaScript会在rating.js加载完成后执行,所以我们的这段代码务必不能过早执行,这里将禁用Rating的函数添加到_spBodyOnLoadFunctionNames中,可以保证我们的代码在执行时,Rating控件自己的代码已经执行完毕了。