目录
列表(ListView)
功能说明
支持数据列表功能的使用,列表可以是固定长度的;也可以是不固定长度的,根据加载数据的多少来展示列表。
对应的数据结构是JSON数组,例如:
json = {list:[{"name":"常用控件"},{"name":"列表"}]}
HTML5
<listView id="listviewdefine0" bindfield="list" collapsed="true"><div id="panel0"><label id="label0" bindfield="name">label</label></div></listView>
属性列表
| 属性名 | 属性值 | 说明 |
|---|---|---|
| linedelshow | true | 可滑动,为简化dsl定义,出现linedelshow属性其值一定等于true,即linedelshow=”true” |
| adaptiveheight | true | 高度根据内容自适应,为简化dsl定义,出现adaptiveheight属性其值一定等于true,即adaptiveheight=”true”,每个数组的内容不会出现下列 |
| row | 当前选中的json字符串 | |
| visibleLoadMore | true | 默认为true,当不需要查看更多显示时,在onload事件里设置此属性$id(“xxx”).set(“visibleLoadMore”,”false”) |
| footertext | 默认是显示更多,如自行需要更改显示字样时在onload事件里设置$id(“xxx”).set(“footertext”,”xxxx”) | |
| rowindex | 绝对位置行索引号 | |
| bindfield | 控件绑定字段 | |
| ListViewSelector | 多模板选择器 |
支持公共属性
参见公共属性说明
事件列表
| 事件名 | 说明 |
|---|---|
| onload | 页面加载事件 |
| onuprefersh | 向上翻页刷新数据,通常是刷新加载首页数据 |
| ondownrefersh | 向下翻页加载下一页数据 |
| onitemclick | 行点击事件 |
| onitemcreate | 创建列表时动态修改列表上cell的属性 |
支持公共事件
参见公共事件说明
实例
1、列表数据加载功能和选择具体行
<listView id="listviewdefine0" bindfield="controllerlist" onload="onload()"onItemClick="rowclick()><div id="panel0"><div id="panel1"><label id="label0" bindfield=" "> </label><label id="label1" bindfield="name"> </label></div></div></listView>
//组装数据function onload(sender, args) {var json = {controllerlist : [{"id" : "id_0","name" : "常用控件"}, {"id" : "id_1","name" : "列表"}]};$ctx.push(json);}//点击具体行jsonfunction rowclick(sender, args) {var data = $id("listviewdefine0").get("row");$alert("当前行号:" + data); //打出当前选中的json字符串}//点击具体行行号function rowclick(sender, args){var index = $id("listview0").get("rowindex");$alert(index);}
2、展示列表的页面传值、下翻功能
<listView id="listviewdefine0" bindfield="persons" onuprefersh="onuprefersh()" linedelshow="true" ondownrefersh="ondownrefersh()" onload="onload()" onItemClick="rowclick()" onitemdelete="onitemdelete()"><div id="panel0"><div id="panel1"><label id="label0" bindfield="" onclick="this.label0_onclick()">姓名</label><label id="label2" bindfield="name"/><label id="label1" bindfield="">电话号码</label><label id="label3" bindfield="tel"/></div><div id="panel2"/></div></listView>
//加载数据function onload(sender, args) {var mylist = $cache.read("mylist");if (!mylist) {var json = {persons : []};for (var i = 0,len = 100; i < len; i++) {var person = {};person["id"] = "10" + i.toString();person["name"] = "王小宝" + i.toString();person["tel"] = 13811220000 + i;json.persons.push(person);}$ctx.push(json);} else {$ctx.push($stringToJSON(mylist));}}//页面传值function rowclick(sender, args) {$view.open({"viewid" : "com.app122.PersonDetails","isKeep" : "true","data" : $id("listviewdefine0").get("row"),"callback" : "mycallback()"});}function mycallback() {var data = $param.getJSONObject("newData");var json = $ctx.getJSONObject();for (var i = 0,len = json.persons.length; i < len; i++) {if (json.persons[i].id == data.id) {json.persons[i] = data;break;}}$ctx.push(json);}//向下翻页function ondownrefersh(sender, args) {var oldjson = $ctx.getJSONArray("persons");var length = oldjson.length;var json = {persons : oldjson};for (var i = length; i < length + 20; i++) {var person = {};person["id"] = "10" + i.toString();person["name"] = "王小宝" + i.toString();person["tel"] = 13811220000 + i.toString();json.persons.push(person);}$ctx.push(json);}
3、列表左滑时出现的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>
functioncom$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("审核不通过");}
效果如下
4、列表多模板实现不同行展现
在DSL的listView标签下有多个div,每个div就是一个行模板,数据在渲染时会根据JSON中的ListViewSelector字段判断使用哪个行模板展示,0表示第一个、1表示第二个、依次类推。
列表DSL:
<listView id="listviewdefine0" bindfield="list" onload="this.loadOpinionDetail()"><div id="panel0"><div id="panel1"><label id="label2" bindfield="opinionDesc" type="multiline">我:内容</label><label id="label3" bindfield="opinionTime">2015-05月-29 15:31:00</label></div></div><div id="panel2"><div id="panel3"><label id="label4" bindfield="opinionDesc" type="multiline">客服:内容</label><label id="label5" bindfield="opinionTime">2015-05月-29 15:31:00</label></div></div></listView>
JS代码:
var json = {list : [{opinionDesc : "我:这个应用不错!",opinionTime : "2015-05月-29 15:31:00",ListViewSelector : "0"}, {opinionDesc : "客服:当然您在功能上有什么好的想法也可以反馈给我们哦!",opinionTime : "2015-05月-29 15:31:00",ListViewSelector : "1"}, {opinionDesc : "我:移动互联网化的又一个先例。",opinionTime : "2015-05月-29 15:31:00",ListViewSelector : "0"}]}$ctx.push(json);
5、创建列表时动态修改列表里控件的信息(Android7.0系统不推荐使用)
此方法已过时,不推荐使用,请使用多模板列表代替(示例4)
增加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) {var args = {"event" : {"childindex" : 1,"groupindex" : 2,"row" : [{}, {}]//数组,每一数组项是一个JSON,包含了控件,如:{"controlid":"label0","color":"#0000FF","value":"绿"}}}}
在onitemcreate事件中对itemsource属性赋值,实现对行内控件赋值
说明
onitemcreate事件中,对itemsource赋值时
修改指定行内控件(普通行列表改行)
$id("listviewdefine0").initListChildItem({"childindex" : 1,//当前的child行的索引号,从0开始"row" : [{"controlid" : "label0","visible" : "false","color" : "#e3e3e3"//还可以增加类似上述的其他dsl属性key-value值}]})
6、实现列表外层容器滚动
参考《常见问题-DSL框架-实现列表外层容器滚动》
文档更新时间: 2018-01-15 14:25