目录

分组列表(ListView list-type=”group”)

功能说明

列表分组展示,支持列表分组功能,数组内嵌数组。
对应的数据结构是JSON数组,例如:

  1. json = {
  2. source:[{
  3. group:"服务类",
  4. row : [{
  5. id : "id_view",
  6. class : "页面服务"
  7. }]
  8. }]
  9. }

HTML5

  1. <listView id="listviewdefine0" bindfield="source,row" list-type="group" collapsed="true">
  2. <div id="panel0">
  3. <label id="label0" bindfield="group">label</label>
  4. </div>
  5. <div id="panel1">
  6. <label id="label1" bindfield="id">label</label>
  7. <label id="label2" bindfield="class">label</label>
  8. </div>
  9. </listView>

属性列表

属性名 属性值 说明
linedelshow true 可滑动,为简化dsl定义,出现linedelshow属性其值一定等于true,即linedelshow=”true”
adaptiveheight true 高度根据内容自适应,为简化dsl定义,出现adaptiveheight属性其值一定等于true,即adaptiveheight=”true”,每个数组的内容不会出现下列
row 当前选中的json字符串
rowindex 二维数组变为一维数组后的绝对行索引号
groupindex 点击的分组索引
childindex 点击所在组的行索引
isshrinklist true/false 默认列表没有该属性,表示不可收缩展开(默认状态),只有当isshrinklist=true时,才表示该列表行可以收缩展开
visibleLoadMore true 默认为true,当不需要查看更多显示时,在onload事件里设置此属性$id(“xxx”).set(“visibleLoadMore”,”false”)
footertext 默认是显示更多,如自行需要更改显示字样时在onload事件里设置$id(“xxx”).set(“footertext”,”xxxx”)
collapsed true/false 分组列表初始折叠,true代表折叠,false或无此属性代表展开
bindfield 控件绑定字段
ListViewSelector 多模板选择器

支持公共属性
参见公共属性说明

事件列表

事件名 说明
onload 页面加载事件
onuprefersh 向上翻页刷新数据,通常是刷新加载首页数据
ondownrefersh 向下翻页加载下一页数据
onitemdelete 右滑删除事件
onitemclick 行点击事件
onitemcreate 创建列表时动态修改列表上cell的属性

支持公共事件
参见公共事件说明

实例

1、实现分组列表功能

  1. function com$yyuap$demo$ControllerGroupListViewController$listviewdefine0_onload(sender, args) {
  2. var json = {
  3. "source" : [{
  4. "group" : "服务类",
  5. "row" : [{
  6. "id" : "id_view",
  7. "class" : "页面服务"
  8. }, {
  9. "id" : "id_network",
  10. "class" : "文件服务"
  11. }]
  12. }, {
  13. "group" : "控件类",
  14. "row" : [{
  15. "title" : "音乐控件"
  16. }, {
  17. "title" : "视频控件"
  18. }]
  19. }]
  20. }
  21. $ctx.push(json);
  22. }
  23. //点击具体行信息
  24. function com$yyuap$demo$HomeWithListviewController$rowclick() {
  25. var data = $id("listviewdefine0").get("row");
  26. $alert("当前行号:" + data); //打出当前选中的json字符串
  27. }
  28. //点击行索引
  29. function rowclick(sender, args) {
  30. var index1 = args.groupindex//点击的分组索引
  31. var index2 = args.childindex//点击所在组的行索引
  32. var index3 = $id("listviewdefine0").get("rowindex"); //兼容以前的rowindex含义,表示二维数组变为一维数组后的绝对行索引号
  33. }

分组列表数据结构如下:

  1. {
  2. groups : [{
  3. "gname" : "A",
  4. "rows" : [{
  5. "x" : 1
  6. }, {
  7. "x" : 2
  8. }, {
  9. "x" : 3
  10. }]
  11. }, {
  12. "gname" : "B",
  13. "rows" : [{
  14. "x" : 4
  15. }, {
  16. "x" : 5
  17. }, {
  18. "x" : 6
  19. }]
  20. }]
  21. }

当groupindex=1,childindex=2时,rowidnex =7,即x:6这一行

2、实现分组列表快速定位

在加载列表的onload事件里加上如下代码:

  1. var indexdatasource = ["A","B","C","D","E","F"];//这里可以任意写索引,按这里写的顺序显示,逻辑是第一个字母指向第一个分组,第二个字母指向第二个分组,以此类推
  2. indexdatasource = $jsonToString(indexdatasource);
  3. $id("listviewdefine0").set("indexdatasource", indexdatasource);

效果如下:
blob.png

3、创建列表时动态修改列表里控件的信息

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

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

  1. //列表行创建事件
  2. <listView id="listviewdefine0" bindfield="cell" onitemcreate="myRowCreate()">
  3. <div id="panel0">
  4. <div id="panel1">
  5. <label id="label0">label</label>
  6. </div>
  7. <div id="panel2"/>
  8. </div>
  9. </listView>

args结构如下:

  1. function functionmyRowCreate(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. //1、修改指定组的指定行内控件(分组列表改行)
  2. params = {
  3. "id" : "listviewdefine0",
  4. "itemtype" : "child", //修改行
  5. "groupindex" : "3", //修改指定分组索引号
  6. "childindex" : "2", //修改指定行索引号
  7. row : [{
  8. "controlid" : "label0",
  9. "color" : "#0000FF",
  10. "value" : "绿"
  11. }, {
  12. "controlid" : "label1",
  13. "color" : "#0000ee",
  14. "value" : "xxxx"
  15. }]
  16. }
  17. $id("listviewdefine0").set("itemsource", jsonToString(params));
  18. //2、修改指定组内控件(分组列表改组)
  19. params = {
  20. "id" : "listviewdefine0",
  21. "itemtype" : "group", //修改组
  22. "groupindex" : "3", //修改指定分组索引号
  23. "row" : [{
  24. "controlid" : "label0",
  25. "color" : "#0000FF",
  26. "value" : "绿"
  27. }]
  28. }
  29. $id("listviewdefine0").set("itemsource", jsonToString(params));
  30. //3、修改指定行内控件(普通行列表改行)
  31. params = {
  32. "id" : "listviewdefine0",
  33. "itemtype" : "child", //修改行
  34. //单列表无需指定groupindex,即使写也不起作用
  35. "childindex" : 2,
  36. "row" : [{
  37. "controlid" : "label0",
  38. "color" : "#0000FF",
  39. "value" : "绿"
  40. }, {
  41. "controlid" : "label1",
  42. "color" : "#0000ee",
  43. "value" : "xxxx"
  44. }]
  45. }
  46. $id("listviewdefine0").set("itemsource", jsonToString(params));

示例

  1. <div id="viewPage0" onload="this.onload()">
  2. <listView id="listviewdefine0" bindfield="cell" onitemcreate="create()">
  3. <div id="panel0">
  4. <div id="panel1">
  5. <label id="label0" bindfield="">label</label>
  6. </div>
  7. <div id="panel2"/>
  8. </div>
  9. </listView>
  10. <input id="button0" value="返回" onclick="this.button0_onclick()" type="button"/>
  11. </div>
  1. functioncom$requirements$List4201cellController$onload(sender, args) {
  2. varjson = {
  3. cell : [{
  4. }, {
  5. }]
  6. };
  7. $ctx.push(json);
  8. }
  9. functioncreate(sender, args) {
  10. varparams = {};
  11. $alert(args);
  12. args.event = $stringToJSON(args.event)
  13. if (args.event.childindex == 0) {
  14. params = {
  15. id : "listviewdefine0",
  16. itemtype : "child",
  17. groupindex : "0", //第几组,普通列表可以没有这个参数
  18. childindex : "0",
  19. row : [{
  20. controlid : "label0",
  21. color : "#FF0000",
  22. value : "红"//未绑定字段则生效
  23. }]
  24. }
  25. }
  26. if (args.event.childindex == 1) {
  27. params = {
  28. id : "listviewdefine0",
  29. itemtype : "child",
  30. groupindex : "0",
  31. childindex : "1",
  32. row : [{
  33. controlid : "label0",
  34. color : "#0000FF",
  35. value : "绿"//未绑定字段则生效
  36. }]
  37. }
  38. }
  39. $id("listviewdefine0").set("itemsource", jsonToString(params));
  40. }

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、实现列表外层容器滚动

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

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