快捷搜索:

SharePoint:扩展DVWP - 第32部分:多DVWP情况下为In

上一次 ,我们评论争论了若何应用jQuery为控件设置一个默认值。 在这个例子中,我们为一个应用了Marc Anderson的SPCascadeDropdowns下拉框设置值 。这是一个异常简单的步骤,只必要对用户正在应用的浏览器和/或下拉列表框的项数做些处置惩罚即可。

然则,当我们在项目中应用了 Christophe Humbert的 Easy Tabs 后,一个页面可以有多个DVWP,每一个为一个选项卡。而且这些DVWP基础上是相同的,只是用了不合的筛选器。这意味着无论你在哪个选项卡里,所有的表单域都是相同的结构要领。

是以,假如我们应用上一篇文章中的脚本,页面上的每个Insert模板(对付我们的例子,有几个DVWP实际上就有几个Insert模版) 都将被设置相同的默认值。然则,对大年夜多半多DVWP的场景,这并不是我们要的结果。

我们该若何区分它们呢?

ID-entifying 办理规划

jQuery里最简单的一个选择器是ID选择器 ("#id")。 为了限定设置默认值的范围,我们只需给每个表单指定一个独一的ID,然后在我们赋值时获取一下即可。

1. 在 SharePoint Designer (SPD)的设计窗格中,点击标题行最左侧的栏

点击标题行中的Employee,将会在代码窗格中凸起显示dvt.headerfield,这样就可以定位到该表单的最上层table

2. 在凸起显示的区域上面,箭头指向的table标记包括了全部显示区域,包括编辑 ,删除和插入模板 。这便是我们将要添加ID的地方

接下来我们可以将全部WebPart导出来,以便重用。我们必要在为每个为经理创建的页面上添加它,并设置筛选前提使其看到该经理所关心的内容。以是这里最好是给这个table一个通用性描述的ID。 假如必要把在同一页上放两个异常相似的DVWP,我们可以为每个DVWP中的table供给一个更具描述性的独特的ID,到时那个ID是和其所在的页面相关。

3. 用同样的措施处置惩罚页面上剩下的DVWP,使每一个都具有一个独一的ID。

对付上面的选项卡集,我用了这些ID:ACB_FTE,ARC_FTE,ADC_FTE,PRN及Other 。 前三个是导入的相同的一个DVWP三次,每一次对应一个Location。对付这三其中的每一个,我设置了筛选器来指定详细位置,同时编辑其ID,以标识出其正在处置惩罚的位置。

现在,让我们返回到jQuery,开始默认值的设置。

$(document).ready(function() {

$("select[title=Location]").val("ACB");$("input[title=Location]").val("ACB").next("img").trigger("click");

$().SPServices.SPCascadeDropdowns({relationshipWebURL: "/operations",

relationshipList: "LocGroup",relationshipListParentColumn: "LocDept",

relationshipListChildColumn: "Group12",relationshipListSortColumn: "Group12",

parentColumn: "Location",childColumn: "Group"

});.

..

});

为了使.val()针对特定的DVWP,我们将在前面添加jQuery ID选择器:

$("#FTE select[title=Location]").val("ACB");

$("#FTE input[title=Location]").val("ACB").next("img").trigger("click");

对我而言,我还必要为页面上别的的DVWP复制这两行代码:

$("#ACB_FTE select[title=Location]").val("ACB");

$("#ACB_FTE input[title=Location]").val("ACB").next("img").trigger("click");$("#ARC_FTE select[title=Location]").val("ARC");

$("#ARC_FTE input[title=Location]").val("ARC").next("img").trigger("click");$("#ADC_FTE select[title=Location]").val("ADC");

$("#ADC_FTE input[title=Location]").val("ADC").next("img").trigger("click");$("#PRN select[title=Location]").val("PRN");

$("#PRN input[title=Location]").val("PRN").next("img").trigger("click");

留意一下jQuery的运行要领:上面的脚本并不是说“找到某个特定的变量,并设置其值”。 这样假如变量没有被定义将导致差错。 相反,它是说:“为每一个匹配该选择器的工具设置其值。” 假如它没有找到任何器械,无害,无臭,代码只是移动到下一条语句而已。

同样,下面的SPServices.SPCascadeDropdowns()调用也是会在每一个经由过程name找到的下拉框上履行,以是也是针对给定页面上所有的DVWP。由于其操作的控件具有相同的名称,以是我们只必要在.ready()函数中包孕一次联动的调用即可。

这里必要留意的是:我们可以在多个选项卡中同时打开了多个Insert模版(或者是edit模版,同理),只管我们在同一光阴只能看到一个,但确凿可以都处于打开状态。 在打开多套下拉框的环境下,级联将无法事情。虽然这种环境百年一遇,用户在没有点击保存或取消的环境下又打开其他选项卡的插入或编辑模板。但一旦碰到了这个问题,你应该知道是什么缘故原由。

为级联下拉框的第二层设置默认值

在上面的截图中你可能已经留意到两件工作:

1.我没有给你你看Other选项卡

2.此中PRN 选项卡设置了二级下拉框的值

首先,我不预先设置顶部的Other选项卡是由于我不知道它要做成什么样。.不过我为其设置了第二层的默认值。

在第二个地方,对付PRN,我知道实际上有三个地点有PRN员工,以是我将第二层预置为此中一个地点。

那么,怎么设置第二层呢?

没什么惊奇的,同第一层的措施一样。

$("#PRN select[title=Group]").val("ACB");

$("#PRN input[title=Group]").val("ACB").next("img").trigger("click");$("#Other select[title=Group]").val("ACB");

$("#Other input[title=Group]").val("ACB").next("img").trigger("click");

在Other选项卡中,我设置了Group,而不是Location 。当用户选择"other” 位置时,Group将不会变。 换句话说,假如用户选择的是“非其他”{够绕口的,呵呵} 的位置时,Group将被空出来。

我把第二层放在了第一层SPCascadeDropdowns调用后。然则,Other选项卡引出了一些问题:

“假如我为所有的字段都设置了默认值,还有需要再设置第二层吗?”

不用了,你可以在SPCascadeDropdowns调用提高行设置。

“假如我只设置了第二层会是什么结果?”

没有关系的。SPCascadeDropdowns级联功能绑定到下拉框的onChange()事故上,当页面加载后实际不会发生级联,之后在父下拉框发生变动后才会变。

闻到厚味的甜品

我们已经靠近扩展DVWP 系列的着末阶段了。下次再会时,我们会实现总数和分类汇总。

参考资料

SharePoint:Extending the DVWP-Part 32:Filling in Default Data on the insert Template with Multiple DVWPs

您可能还会对下面的文章感兴趣: