目录
多种方式创建动态列表
iUAP Mobile 是一个开源的移动开发平台,能够引用第三方框架。本文通过引用不同的框架和模板引擎,创建相同的动态列表。
1.for循环
用原生js或者使用jq开发动态列表:
for(var i=0;i<jsonArray.length;i++){var item=jsonArray[i];var $li=$('<li class="um-listview-row">' +'<a href="#" class="um-list-item um-swipe-action um-no-icon">' +'<div class="um-swipe-btns"> <span class="um-swipe-btn um-delete">删除</span> ' +'</div>' +' <div class="um-list-item-media msg-info"> <img alt="" src="'+item.img+'" width=50>' +' <span class="um-badge">'+item.msgNum+'</span> </div> ' +'<div class="um-list-item-inner"> <div class="um-list-item-body"> ' +'<h4 class="um-media-heading fb f16 um-text-overflow">'+item.sender+'</h4> ' +'<p class="um-gray f14 um-text-overflow">'+item.lastMsg+'</p> </div> ' +'<div class="pr10"> <span class="um-gray f12">'+item.lastTime+'</span> </div> ' +'</div> </a></li>');$li.appendTo($ul);};
遍历后台返回的数据,每循环一次动态创建生成一个li标签,将数据以变量的形式添加到标签字符串中,将字符串拼接到一起并把li标签添加到ul中,这就生成了一个列表。for循环代码量较多,不利于维护,适用于demo开发或者轻应用开发,不适合大型程序开发;
2.artTemplate 模板引擎
artTemplate是新一代javascript模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用javascript引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。更多介绍请参考artTemplate官网;
使用方法:
1、在你的HTML页面里使用script标签引用artTemplate模板引擎。
<script type="text/javascript" src="js/artTemplate.js"></script>
2、创建一个script标签标签的属性为’type=text/html’,并加上属性id,示例代码:
<script id="list" type="text/html"><div class="um-listview-wrap" id="listview"><ul class="um-list um-no-active">{{each list as value i}}<li class="um-listview-row"><a href="#" class="um-list-item um-swipe-action um-no-icon"><div class="um-swipe-btns"><span class="um-swipe-btn um-delete">删除</span></div><div class="um-list-item-media msg-info"><img alt="" src="{{value.img}}" width=50><span class="um-badge">{{value.msgNum}}</span></div><div class="um-list-item-inner"><div class="um-list-item-body"><h4 class="um-media-heading fb f16 um-text-overflow">{{value.sender}}</h4><p class="um-gray f14 um-text-overflow">{{value.lastMsg}}</p></div><div class="pr10"><span class="um-gray f12">{{value.lastTime}}</span></div></div></a></li>{{/each}}</ul></div></script>
3、创建完模板后在业务代码中通过获取script标签的id属性值将数据绑定到模板中,最后将模板添加到dom结构中,示例代码:
var data={list:jsonArray};var html = template('list', data);$('.um-content').html(html);
3.doT 模板引擎
dot.js是一个模板框架,在web前端使用。doT.js特点是快,小,无依赖其他插件。更多请参考doT 官网;
使用方法:
1、在你的HTML页面里使用script标签引用doT模板引擎。
<script type="text/javascript" src="js/doT.js"></script>
2、创建一个script标签标签的属性为’text/x-dot-template’,并加上属性id,示例代码:
<script type="text/x-dot-template" id="list"><div class="um-listview-wrap" id="listview"><ul class="um-list um-no-active">{{~it.list:value:index }}<li class="um-listview-row"><a href="#" class="um-list-item um-swipe-action um-no-icon"><div class="um-swipe-btns"><span class="um-swipe-btn um-delete">删除</span></div><div class="um-list-item-media msg-info"><img alt="" src="{{=value.img}}" width=50><span class="um-badge" data-bind="text:msgNum,visible:msgNum>0">{{=value.msgNum}}</span></div><div class="um-list-item-inner"><div class="um-list-item-body"><h4 class="um-media-heading fb f16 um-text-overflow" data-bind="text:sender">{{=value.sender}}</h4><p class="um-gray f14 um-text-overflow" data-bind="text:lastMsg">{{=value.lastMsg}}</p></div><div class="pr10"><span class="um-gray f12" data-bind="text:lastTime">{{=value.lastTime}}</span></div></div></a></li>{{~}}</ul></div></script>
3、创建完模板后在业务代码中将模板渲染到页面中,示例代码:
var data={list:jsonArray};var evalText = doT.template($("#list").text());$("#main").html(evalText(data));
4.Knockout
Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库。任何时候如果你的UI需要自动更新(比如:更新依赖于用户的行为或者外部数据源的改变),KO能够很简单的帮你实现并且很容易维护。Knockout是一个轻量级的UI类库,通过应用MVVM模式使JavaScript前端UI简单化。提供了声明式绑定、UI界面自动刷新、依赖跟踪、模板等重要的概念。具体内容请参照knockout官网。
1、在你的HTML页面里使用script标签引用Knockout类库文件。
<script type="text/javascript" src="./js/knockout.js"></script>
2、通过数据绑定的方式,将后台返回的数据绑定的dom结构上,示例代码:
<div class="um-listview-wrap" id="listview"><ul class="um-list um-no-active" data-bind="foreach: data"><li class="um-listview-row"><a href="#" class="um-list-item um-swipe-action um-no-icon"><div class="um-swipe-btns"><span class="um-swipe-btn um-delete">删除</span></div><div class="um-list-item-media msg-info"><img alt="" data-bind="attr:{'src': img}" width=50><span class="um-badge" data-bind="text:msgNum,visible:msgNum>0"></span></div><div class="um-list-item-inner"><div class="um-list-item-body"><h4 class="um-media-heading fb f16 um-text-overflow" data-bind="text:sender"></h4><p class="um-gray f14 um-text-overflow" data-bind="text:lastMsg"></p></div><div class="pr10"><span class="um-gray f12" data-bind="text:lastTime"></span></div></div> </a></li></ul></div>
3、在业务逻辑的代码中将数据双向绑定到dom结构中,示例代码:
//构造控件实例var listview = UM.listview("#listview");//创建一个列表对象var ViewModel = function() {};//示例话列表对象var viewModel = new ViewModel();//将data数据绑定到对象上,并自动探测到相关的依赖viewModel.data = ko.observableArray(jsonArray);//激活konckoutko.applyBindings(viewModel);
多种方式创建动态列表的测试demo的
github 地址