在处理很多行数据的时候, 我们也许希望能够显示处理的进度, 在
JQueryElement 3.2 版本中,
Repeater 即实现了这一功能.
相对于前一 3.1.2 版本, Repeater 修改了模板中绑定的语法, 使模板更加的清晰明了, 恢复了去除的 Field 属性, 以为空数据时的新建操作提供依据.
本次的例子仍然是在前几个示例的基础上修改, 如果大家有不明白的可以参考, Repeater 无刷新获取分页数据, Repeater 无刷新删除 新建 更新数据, Repeater 以不同色彩显示各种状态的行.
我们还是直接来看代码, 下面是
Repeater 的行模板:
1 <ItemTemplate>
2 <ul je-class="{state}-item">
3 <li>
4 <input type="checkbox" je-checked="selected" je-onclick="toggleselect" />#{id}</li><li>
5 #{realname}</li><li>#{age}</li><li>#{skill}</li>
6 <li><a href="#" je-onclick="beginedit">编辑</a> <a href="#" je-onclick="remove">删除</a> <a href="#" je-onclick="custom,dialog">对话框</a></li>
7 </ul>
8 </ItemTemplate>
在 ItemTemplate 行模板中我们看到新的绑定方式: #{<字段名>}, 标签属性绑定方式: je-<标签属性名>="<绑定值>". 其中 je-checked="selected" 表示根据当前行是否选中生成对应的 checked 属性. je-onclick="toggleselect" 表示点击检查框切换行的选中状态. 而模板中其他的代码和原来的没有太大变化.
当然, 3.2 中模板语法还有其他的改动, 大家可以下载示例代码或者观看视频.
现在, 我们已经可以通过点击检查框来选中某一行, 接下来, 我们来添加一个按钮来进行全选的功能.
1 <je:Button ID="cmdSelectAll" runat="server" ElementType="Span" Label="全选" Click="
2 function(){ studentRepeater.__repeater('selectall'); }
3 ">
4 </je:Button>
在上面的按钮中, 我们为他的 Click 事件编写了脚本, 在脚本中, 我们调用 repeater 的 selectall 方法来选中所有的行, 在选中所有行后, 页面也会刷新, 检查框也会选中.
除了全选, 我们还可以执行 unselectall, toggleselectall, removeselected 方法来不选和反选所有行, 删除选中的行.
最后, 我们为 Repeater 编写 SubStepping 事件, 在事件的 e 参数中, substep 中就包含了进度信息, count 表示需要执行的行数, completed 表示已经执行完毕的行数.
1 SubStepping="
2 function(tag, e){
3 $('#message').text('共 ' + e.substep.count.toString() + ' 个, 完成了 ' + e.substep.completed.toString() + ' 个');
4 }
5 "
这样, 我们在选中一些行之后, 点击删除选中的按钮, 就可以显示删除的进度, 添加删除按钮的过程没有讲述.
在视频中, 我还演示了如何弹出对话框来编辑行, 在这里稍微看下代码.
1 <je:Dialog ID="editDialog" runat="server" IsVariable="true" Title="修改学生信息" AutoOpen="false"
2 Resizable="false" Buttons="
3 {
4 '确定': function(){
5 studentRepeater.__repeater('setrow', new Number($('#edit_index').val()), { realname: $('#edit_name').val(), age: $('#edit_age').val(), skill: $('#edit_skill').val() }, true);
6 studentRepeater.__repeater('update', new Number($('#edit_index').val()));
7 editDialog.dialog('close');
8 },
9 '取消': function(){
10 editDialog.dialog('close');
11 }
12 }">
13 <ContentTemplate>
14 <input id="edit_index" type="hidden" />
15 序号: <span id="edit_id"></span>
16 <br />
17 <br />
18 姓名:
19 <input id="edit_name" type="text" /><br />
20 <br />
21 年龄:
22 <input id="edit_age" type="text" /><br />
23 <br />
24 特长:
25 <input id="edit_skill" type="text" /><br />
26 <br />
27 </ContentTemplate>
28 </je:Dialog>
在对话框的内容模板中, 我们有三个文本框来显示和修改学生的信息, 在 Dialog 的 Buttons 属性中, 我们为对话框添加两个按钮, 在确定按钮中, 我们首先调用 repeater 的 setrow 方法, 将修改的信息设置到 repeater 中, 然后使用 update 方法更新修改的行, 其中 edit_index 隐藏值保存的是行的索引.
刚才的 ItemTemplate 中, 我们有一个对话框按钮, 并有个一个 je-onclick="custom,dialog" 属性, 他表示在点击时, 我们执行 repeater 的 custom 方法并传递 dialog 作为参数. 这样我们只需要处理 PreCustom 事件将对话框弹出即可, 代码如下:
1 PreCustom="
2 function(tag, e){
3
4 if(e.command == 'dialog'){
5 $('#edit_index').val(e.index);
6
7 $('#edit_id').text(e.row.id);
8 $('#edit_name').val(e.row.realname);
9 $('#edit_age').val(e.row.age);
10 $('#edit_skill').val(e.row.skill);
11 editDialog.dialog('open');
12 return false; }
13 }
14 "
我们判断如果 custom 方法的参数为 dialog, 那么我们将当前行的值传递给对话框中的文本框和隐藏值, 然后显示对话框, 并返回 false, 以停止执行 custom.
这样, 我们就完成了弹出对话框修改行的信息.
3.2版本的改动就给大家说到这里了.
JQueryElement 是开源共享的代码, 可以在 http://code.google.com/p/zsharedcode/wiki/Download 页面下载 dll 或者是源代码.
目前 JQueryElement 最新版本为 3.2, 可以在上面的地址看到新版本改动的内容.
示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementTest.rar.
实际过程演示: http://www.tudou.com/programs/view/A8jdVD6HYFY/ , 建议全屏观看.