目录
列表控件专题
本文介绍五种经典列表场景使用
- 场景一:列表到明细页的传值;
 - 场景二:列表的分页效果;
 - 场景三:列表的分组效果;
 - 场景四:列表左滑时出现的button个数和样式;
 - 场景五: 创建列表时动态修改列表里cell的信息
 
场景一
使用说明:展示列表的绑定数据源和导航到明细页。
步骤:
1、新建页面listsingle,把列表控件拖入设计器,设置绑定字段属性为list。分别拖入三个标签控件,绑定字段分别绑定code、name、price。其中list、code、name、price这些字段在下面的js代码中会有定义。如图:
2、列表控件上增加onload事件以便能够加载数据,方法名定为loaddata。如图:
此时生成的DSL为:
<listView id="listviewdefine0" bindfield="list" onload="loaddata()"><div id="panel0"><div id="panel1"><label id="label0" bindfield="code">label</label><label id="label1" bindfield="name">label</label><label id="label2" bindfield="price">label</label></div><div id="panel2"/></div></listView>
3、确定生成代码,在loaddata中加如下代码:
function loaddata(sender, args) {var list = [];for(var i = 0; i <= 20; i++) {var json = {"code" : i,"name" : "商品" + i,"price" : 10 * i};list.push(json);}var json = {list : list};$ctx.push(json);}
4、增加明细页面detail。完成文本框的数据绑定code、name、price。如图:
5、在listsingle页面中的列表控件中标签所在的容器上增加onclick事件。Dsl代码如下:
6、在opendetail方法中编写如下代码:
function opendetail(sender, args) {$view.open({"viewid" : "com.lpsoft.listdemo.Detail", //目标页面(首字母大写)全名,"isKeep" : "true", //保留当前页面不关闭"row" : $id("listviewdefine0").get("row")});}
7、在detail页面增加onload事件并增加如下代码:
Binddata方法:
function binddata(sender, args){var json=$param.getJSONObject("row");$ctx.push(json);}
场景二
功能说明:模拟列表分页的效果。
使用说明:在此基础上,修改列表控件load数据的逻辑并且增加列表上下分页的事件。
步骤:
1、增加列表下翻事件。如图:
2、增加下翻逻辑。
function down(sender, args) {var oldjson = $ctx.getJSONArray("list");var length = oldjson.length;var json = {list : oldjson};for(var i = length; i < length + 20; i++) {var line = {};line["code"] = i;line["name"] = "商品" + i;line["price"] = "$" + i;json.list.push(line);}$ctx.push(json);}
场景三
功能说明:分组效果。
步骤:
1、新建一个新的页面mlist。从组合控件中见分组列表控件拖到页面中。设置绑定字段为list。并且增加onload事件。如图:
2、增加onload逻辑。
注意修改listview背景色,不能为白色
function linedelete(sender, args) {var row = $id("listviewdefine0").get("row");delteRow($stringToJSON(row));}function delteRow(row) {var sourceR = $ctx.getJSONArray("list");for(var i = 0; i < sourceR.length; i++) {var group = sourceR[i];if (group.id == row.id) {sourceR.splice(i, 1);break;}}var json = {};json["list"] = sourceR;$ctx.push(json);}
场景四
功能说明:列表左滑时出现的button个数和样式。
说明:可以随意定义左滑时出现的button个数和样式,imagebutton支持的属性创建button时都支持
设计器上进行如下操作:
<listView id="listviewdefine0" bindfield="source420" linedelshow="true" onload="this.onload()"><div id="panel0"><div id="panel1"><label id="label0" bindfield="row420">label</label></div><div id="panel2"/></div></listView>
function com$requirements$SlidingitemController$onload(sender, args) {var rightflipper = [{"halign" : "center","text-align" : "right","width" : "70","icon-width" : "12","istogglebutton" : "false","font-pressed-color" : "#ffffff","icon-height" : "12","height" : "59", //与列表行高度相同即可"color" : "#ffffff","layout-type" : "linear","background" : "#FF615A","font-size" : "12","icon-background-image" : "audit_refuse.png","value" : "拒绝","icon-pressed-image" : "audit_refuse.png","font-family" : "default","valign" : "center","checked" : "false","icon-text-spacing" : "8","onclick" : "a()"}, {"halign" : "center","text-align" : "right","width" : "70","icon-width" : "12","istogglebutton" : "false","font-pressed-color" : "#ffffff","icon-height" : "12","height" : "59","color" : "#ffffff","layout-type" : "linear","background" : "#15AD64","font-size" : "12","icon-background-image" : "audit_agree.png","value" : "同意","icon-pressed-image" : "audit_agree.png","font-family" : "default","valign" : "center","checked" : "false","icon-text-spacing" : "8","onclick" : "b()"}];$id("listviewdefine0").set("slidingitems", rightflipper);var json = {source420 : [{row420 : "支持操纵列表cell"}, {row420 : "分组按字母排序"}, {row420 : "laber支持html"}, {row420 : "获取本地联系人所有信息"}, {row420 : "列表左滑用户能自行设置"}]};$ctx.push(json);}function a() {$alert("审核通过");}function b() {$alert("审核不通过");}
效果如下:
场景五
1、增加onitemcreate事件
<!--列表行创建事件--><listView id="listviewdefine0" bindfield="cell" onitemcreate="myRowCreate()"><div id="panel0"><div id="panel1"><label id="label0">label</label></div><div id="panel2"/></div></listView>
args结构如下:
function myRowCreate(sender, args) {args = {"event":{"childindex" : 1,"groupindex" : 2,"row":[{},{}]//数组,每一数组项是一个JSON,包含了控件,如:{"controlid" : "label0", "color" : "#0000FF", "value" : "绿"}}}
2、在onitemcreate事件中对itemsource属性赋值,实现对行内控件赋值*
说明:onitemcreate事件中,对itemsource赋值时
//1、修改指定组的指定行内控件-------分组列表改行$id("listviewdefine0").initListChildItem({"groupindex" : groupindex, //指定的分组的索引号"childindex" : childindex, //当前的child行的索引号"row" : [{"controlid" : "label20","visible" : "true","color" : "#e3e3e3"//还可以增加类似上述的其他dsl属性key-value值}]})//2、修改指定组内控件-------分组列表改组$id("listviewdefine0").initListGroupItem({"groupindex" : groupindex, //指定的分组的索引号"row" : [{"controlid" : "label20","visible" : "true","color" : "#e3e3e3"//还可以增加类似上述的其他dsl属性key-value值}]})//3、修改指定行内控件--------普通行列表改行$id("listviewdefine0").initListChildItem({"childindex" : 1, //当前的child行的索引号,从0开始"row" : [{"controlid" : "label0","visible" : "false","color" : "#e3e3e3"//还可以增加类似上述的其他dsl属性key-value值}]})
function create(sender, args) {$alert(args);args.event = $stringToJSON(args.event)if (args.event.childindex == 0) {// 您的代码逻辑}if (args.event.childindex == 1) {// 您的代码逻辑}}