web移动前端ListView运用

1、准备的html文件、template模板和json数据

html文件(userImfor.html)

<div id="user-list" class="listview">

    <div class="scroller">

        <div class="pulldown">

            <span class="icon"></span>

            <span class="label"></span>

        </div>

<ul>

        </ul>

        <button class="loadmore btn btn-block btn-outlined">

            <div class="label">加载更多</div>

            <span class="icon"></span>

        </button>

        <div class="message">

            <div class="empty">没有数据</div>

            <div class="error">数据加载失败</div>

        </div>

</div>

</div>

Template模板(放在html文件里)

<script id="userImfor" type="text/x-underscore-template">

<div><%=name%></div>

</script>

json数据(放在json文件)(userImfor.json)

{

"data":{

"data":[

{"name": "张三"},

{"name": "李四"},

{"name": "王五"},

{"name": "赵六"}

]

}

}

2、把template模板添加到ul中、把数据添加到模本中(js文件中),即Datasource ListView的运用。

情况一:模板中的取值的属性在json数据中有这一属性;简单说data有一个属性name 和模板template中需要得出的name值是一样的。

 

 

 

 

 

define([

        "text!myinfo/userImfor.html", 

        "common/navView",

        'shared/js/datasource',

        'listview/ListView'    

],

function(template,View,DataSource,ListView)

{

var Base = View;

return Base.extend({

id : “userImfor”,

template: template,

onShow : function(){

var me = this;

me.initData("session",true);

} ,

initData: function(storage, autoLoad){

var me = this;

me._datasource = new DataSource({

    identifier: user-list',

    storage: storage,

    url: ‘../myinfo/userImfor.json’,

    pageParam: 'pageIndex',

    requestParams: {          //与后台交付时需要传递的参数

    }

});

            var listEl = this.getElement("#user-list");  //容器的element

template = _.template(this.elementHTML(“#userImfor”)); //加载模板

this._serviceList = new ListView({

id : "listview",

el : listEl,

itemTemplate : template,

dataSource : me._datasource //listview内部把数据添加到指定的节点中

});

}

});

});

 

情况二:模板中的取值的属性在json数据中找不到该属性时,需要我们动态的去增加json数据的属性使得模板中取值的属性在json里有

 

 

Template模板

<script id="userImfor" type="text/x-underscore-template">

<div><%=name%></div>

<div><%=age%></div>

</script>

js文件中ListView中修改为:

define([

        "text!myinfo/userImfor.html", 

        "common/navView",

        'shared/js/datasource',

        'listview/ListView' ,

"listview/ListViewItem",  

"common/osUtil",

],

function(template,View,DataSource,ListView, ListItemBase, osUtil)

{ var RankListItem = ListItemBase.extend(

        {

            initialize: function(options)

            {

                var me = this;

                ListItemBase.prototype.initialize.call(this, options);

var data = osUtil.clone(options.data); //clone一个data数据

data.age = 20   //data数据新增一个age属性并且值为20

var e = $(options.userData.template(options.data));把新的对象数据加入模板中

this.setContent(e); 把模板添加到user-listul节点中

}

});

var Base = View;

return Base.extend({

....... //此处省略

initData: function(storage, autoLoad){

var me = this;

me._datasource = new DataSource({

    identifier: user-list',

    storage: storage,

    url: ‘../myinfo/userImfor.json’,

    pageParam: 'pageIndex',

    requestParams: {          //与后台交付时需要传递的参数

    }

});

            var listEl = this.getElement("#user-list");  //容器的element

template = _.template(this.elementHTML(“#userImfor”)); //加载模板

this._serviceList = new ListView({

id : "listview",

el : listEl,

itemClass:RankListItem,

    userData:{template:template},

dataSource : me._datasource //listview内部把数据添加到指定的节点中

});

}

});

});

尝试着写web下的listview控件,listview一般有四种显示模式——平铺、图标、列表和详细信息。这些显示模式唯一的共同点就是数据是相同的,显示效果完全不一样。这时候xml的优势就完全体现出来了。 第一步,就是建立一个自定义格式的xml,用来保存listview数据 第二步,xsl可以解析xml生成html,所以就针对listview的每一种显示效果设计了一个对应的xsl。这样前面定义的xml数据和不同的xsl一起就可以显示出不同的效果。 第三步,htc在开发web控件时,非常灵活和功能强大,可以采用客户端脚本如js,可以对控件进行封装,使之有自己的属性、方法和事件等。利用htc封装的listview控件中对外有两个属性CfgXMLSrc(配置文件,设置listview的每一种显示模式对应的xsl文件路径等信息)和View(listview的显示模式),在htc中根据listview的View属性来选择不同的xsl文件和xml数据文件生成html,并输出。 这样就可以通过改变listview控件的view属性来切换listview的不同显示效果。 在线演示 打包下载 以前写换皮肤的控件,都是通过更换css和图片路径来做的(可以看看http://www.stedy.com),局限性很大,例如toolbar,在winxp和win2000下差别很大,只靠通过换css和图片路径无法应付这种情况。通过开发listview的经验,从中悟到了一种更好的开发换皮肤的web控件的模式: 首先将控件的相关数据用xml描述出来,对于每一种Theme(皮肤/主题样式),有一个相关的配置文件,配置文件中记载了该控件所用到的xsl、css、图片路径、htc等信息。在控件相关的htc中,根据Theme属性组合这些。从而可以灵活的应付各种情况。 例如刚才说的toolbar,假如入我们有三种风格:winxp蓝色、winxp银色和windows经典,前面两种基本差不多,只是样式和图片不一样,而后面一种和前面的两种差别比较大。那么我们需要写两个xsl,三个css文件,三个图片文件夹,组合一下就可以生成这三种风格的toolbar了。 这种控件开发模式会慢慢流行起来并在asp.net控件中发挥重要作用的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值