目录

列表(ListView)

功能说明

支持数据列表功能的使用,列表可以是固定长度的;也可以是不固定长度的,根据加载数据的多少来展示列表。
对应的数据结构是JSON数组,例如:

  1. json = {
  2. list:[{
  3. "name":"常用控件"
  4. },{
  5. "name":"列表"
  6. }]
  7. }

HTML5

  1. <listView id="listviewdefine0" bindfield="list" collapsed="true">
  2. <div id="panel0">
  3. <label id="label0" bindfield="name">label</label>
  4. </div>
  5. </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、列表数据加载功能和选择具体行

  1. <listView id="listviewdefine0" bindfield="controllerlist" onload="onload()"onItemClick="rowclick()>
  2. <div id="panel0">
  3. <div id="panel1">
  4. <label id="label0" bindfield=" "> </label>
  5. <label id="label1" bindfield="name"> </label>
  6. </div>
  7. </div>
  8. </listView>
  1. //组装数据
  2. function onload(sender, args) {
  3. var json = {
  4. controllerlist : [{
  5. "id" : "id_0",
  6. "name" : "常用控件"
  7. }, {
  8. "id" : "id_1",
  9. "name" : "列表"
  10. }]
  11. };
  12. $ctx.push(json);
  13. }
  14. //点击具体行json
  15. function rowclick(sender, args) {
  16. var data = $id("listviewdefine0").get("row");
  17. $alert("当前行号:" + data); //打出当前选中的json字符串
  18. }
  19. //点击具体行行号
  20. function rowclick(sender, args){
  21. var index = $id("listview0").get("rowindex");
  22. $alert(index);
  23. }

2、展示列表的页面传值、下翻功能

  1. <listView id="listviewdefine0" bindfield="persons" onuprefersh="onuprefersh()" linedelshow="true" ondownrefersh="ondownrefersh()" onload="onload()" onItemClick="rowclick()" onitemdelete="onitemdelete()">
  2. <div id="panel0">
  3. <div id="panel1">
  4. <label id="label0" bindfield="" onclick="this.label0_onclick()">姓名</label>
  5. <label id="label2" bindfield="name"/>
  6. <label id="label1" bindfield="">电话号码</label>
  7. <label id="label3" bindfield="tel"/>
  8. </div>
  9. <div id="panel2"/>
  10. </div>
  11. </listView>
  1. //加载数据
  2. function onload(sender, args) {
  3. var mylist = $cache.read("mylist");
  4. if (!mylist) {
  5. var json = {
  6. persons : []
  7. };
  8. for (var i = 0,
  9. len = 100; i < len; i++) {
  10. var person = {};
  11. person["id"] = "10" + i.toString();
  12. person["name"] = "王小宝" + i.toString();
  13. person["tel"] = 13811220000 + i;
  14. json.persons.push(person);
  15. }
  16. $ctx.push(json);
  17. } else {
  18. $ctx.push($stringToJSON(mylist));
  19. }
  20. }
  21. //页面传值
  22. function rowclick(sender, args) {
  23. $view.open({
  24. "viewid" : "com.app122.PersonDetails",
  25. "isKeep" : "true",
  26. "data" : $id("listviewdefine0").get("row"),
  27. "callback" : "mycallback()"
  28. });
  29. }
  30. function mycallback() {
  31. var data = $param.getJSONObject("newData");
  32. var json = $ctx.getJSONObject();
  33. for (var i = 0,
  34. len = json.persons.length; i < len; i++) {
  35. if (json.persons[i].id == data.id) {
  36. json.persons[i] = data;
  37. break;
  38. }
  39. }
  40. $ctx.push(json);
  41. }
  42. //向下翻页
  43. function ondownrefersh(sender, args) {
  44. var oldjson = $ctx.getJSONArray("persons");
  45. var length = oldjson.length;
  46. var json = {
  47. persons : oldjson
  48. };
  49. for (var i = length; i < length + 20; i++) {
  50. var person = {};
  51. person["id"] = "10" + i.toString();
  52. person["name"] = "王小宝" + i.toString();
  53. person["tel"] = 13811220000 + i.toString();
  54. json.persons.push(person);
  55. }
  56. $ctx.push(json);
  57. }

3、列表左滑时出现的button个数和样式

说明
可以随意定义左滑时出现的button个数和样式,imagebutton支持的属性创建button时都支持设计器上进行如下操作:

  1. <listView id="listviewdefine0" bindfield="source420" linedelshow="true" onload="this.onload()">
  2. <div id="panel0">
  3. <div id="panel1">
  4. <label id="label0" bindfield="row420">label</label>
  5. </div>
  6. <div id="panel2"/>
  7. </div>
  8. </listView>
  1. functioncom$requirements$SlidingitemController$onload(sender, args) {
  2. var rightflipper = [{
  3. "halign" : "center",
  4. "text-align" : "right",
  5. "width" : "70",
  6. "icon-width" : "12",
  7. "istogglebutton" : "false",
  8. "font-pressed-color" : "#ffffff",
  9. "icon-height" : "12",
  10. "height" : "59", //与列表行高度相同即可
  11. "color" : "#ffffff",
  12. "layout-type" : "linear",
  13. "background" : "#FF615A",
  14. "font-size" : "12",
  15. "icon-background-image" : "audit_refuse.png",
  16. "value" : "拒绝",
  17. "icon-pressed-image" : "audit_refuse.png",
  18. "font-family" : "default",
  19. "valign" : "center",
  20. "checked" : "false",
  21. "icon-text-spacing" : "8",
  22. "onclick" : "a()"//点击事件
  23. }, {
  24. "halign" : "center",
  25. "text-align" : "right",
  26. "width" : "70",
  27. "icon-width" : "12",
  28. "istogglebutton" : "false",
  29. "font-pressed-color" : "#ffffff",
  30. "icon-height" : "12",
  31. "height" : "59", //与列表行高度相同即可
  32. "color" : "#ffffff",
  33. "layout-type" : "linear",
  34. "background" : "#15AD64",
  35. "font-size" : "12",
  36. "icon-background-image" : "audit_agree.png",
  37. "value" : "同意",
  38. "icon-pressed-image" : "audit_agree.png",
  39. "font-family" : "default",
  40. "valign" : "center",
  41. "checked" : "false",
  42. "icon-text-spacing" : "8",
  43. "onclick" : "b()"//点击事件
  44. }];
  45. $id("listviewdefine0").set("slidingitems", rightflipper);
  46. var json = {
  47. source420 : [{
  48. row420 : "支持操纵列表cell"
  49. }, {
  50. row420 : "分组按字母排序"
  51. }, {
  52. row420 : "laber支持html"
  53. }, {
  54. row420 : "获取本地联系人所有信息"
  55. }, {
  56. row420 : "列表左滑用户能自行设置"
  57. }]
  58. };
  59. $ctx.push(json);
  60. }
  61. function a() {
  62. $alert("审核通过");
  63. }
  64. function b() {
  65. $alert("审核不通过");
  66. }

效果如下

4、列表多模板实现不同行展现

在DSL的listView标签下有多个div,每个div就是一个行模板,数据在渲染时会根据JSON中的ListViewSelector字段判断使用哪个行模板展示,0表示第一个、1表示第二个、依次类推。

列表DSL:

  1. <listView id="listviewdefine0" bindfield="list" onload="this.loadOpinionDetail()">
  2. <div id="panel0">
  3. <div id="panel1">
  4. <label id="label2" bindfield="opinionDesc" type="multiline">我:内容</label>
  5. <label id="label3" bindfield="opinionTime">2015-05月-29 15:31:00</label>
  6. </div>
  7. </div>
  8. <div id="panel2">
  9. <div id="panel3">
  10. <label id="label4" bindfield="opinionDesc" type="multiline">客服:内容</label>
  11. <label id="label5" bindfield="opinionTime">2015-05月-29 15:31:00</label>
  12. </div>
  13. </div>
  14. </listView>

JS代码:

  1. var json = {
  2. list : [{
  3. opinionDesc : "我:这个应用不错!",
  4. opinionTime : "2015-05月-29 15:31:00",
  5. ListViewSelector : "0"
  6. }, {
  7. opinionDesc : "客服:当然您在功能上有什么好的想法也可以反馈给我们哦!",
  8. opinionTime : "2015-05月-29 15:31:00",
  9. ListViewSelector : "1"
  10. }, {
  11. opinionDesc : "我:移动互联网化的又一个先例。",
  12. opinionTime : "2015-05月-29 15:31:00",
  13. ListViewSelector : "0"
  14. }]
  15. }
  16. $ctx.push(json);

5、创建列表时动态修改列表里控件的信息(Android7.0系统不推荐使用)

此方法已过时,不推荐使用,请使用多模板列表代替(示例4)

增加onitemcreate事件(此事件效率较低,谨慎使用)

  1. <listView id="listviewdefine0" bindfield="cell" onitemcreate="myRowCreate()">
  2. <div id="panel0">
  3. <div id="panel1">
  4. <label id="label0">label</label>
  5. </div>
  6. <div id="panel2"/>
  7. </div>
  8. </listView>

args结构如下

  1. function myRowCreate(sender, args) {
  2. var args = {
  3. "event" : {
  4. "childindex" : 1,
  5. "groupindex" : 2,
  6. "row" : [{}, {}]//数组,每一数组项是一个JSON,包含了控件,如:{"controlid":"label0","color":"#0000FF","value":"绿"}
  7. }
  8. }
  9. }

在onitemcreate事件中对itemsource属性赋值,实现对行内控件赋值

说明
onitemcreate事件中,对itemsource赋值时
修改指定行内控件(普通行列表改行)

  1. $id("listviewdefine0").initListChildItem({
  2. "childindex" : 1,//当前的child行的索引号,从0开始
  3. "row" : [{
  4. "controlid" : "label0",
  5. "visible" : "false",
  6. "color" : "#e3e3e3"
  7. //还可以增加类似上述的其他dsl属性key-value值
  8. }]
  9. })

6、实现列表外层容器滚动

参考《常见问题-DSL框架-实现列表外层容器滚动》

文档更新时间: 2018-01-15 14:25