Sencha Touch 2 - Dataview里面实现items迭代并初始化items的一些属性
2012-09-04 16:25
441 查看
前提条件:ST2有很多items放到container里面需要用着模版使用。 items很多属性需要初始化并且赋值。当然itemTpl可以实现迭代。但是有个缺点是只能使用html标签。不能使用ST的一些控件标签。所以本文将介绍怎么使用dataitem方式迭代初始化控件。
item的模版,也就是模版的迭代部分
/**
* @author larrywoo Email:larrywoo1982@gmail.com
*/
Ext.define('DingCan.view.CartItem', {
extend : 'Ext.Container',
xtype : 'mydataview',
requires : ['Ext.Label'],
config : {
//scrollable : true,
//此处的fullscreen要慎用。不然dataview不能显示
//fullscreen : true,
layout : 'vbox',
items : [{
xtype : 'container',
layout : 'hbox',
items : [{
//id : 'image',
itemId : 'cartimage',
xtype : 'image',
mode : 'tag',
src : '',
cls : 'cart-item-thumb'
},
{
xtype : 'container',
flex : 1,
layout : 'vbox',
items : [{
itemId : 'name',
//id : 'name',
html : '产品名称',
cls : 'cart-item-name'
}, {
xtype : 'container',
cls : 'cart-item-props',
layout : 'vbox',
items : [{
itemId : 'price',
//id : 'price',
html : '价格:¥4.00',
cls : 'item-prop'
}, {
itemId : 'taste',
//id : 'taste',
html : '麻辣,少蒜少葱',
cls : 'item-prop'
}]
}]
}
]
}, {
itemId : 'quantity',
//id : 'quantity',
xtype : 'spinnerfield',
label : '数量',
labelWidth : '60%',
labelWrap : true,
labelAlign : 'right',
increment : 1,
minValue : 1,
maxValue : 50
}]
},
initialize : function() {
this.callParent(arguments);
},
beforeInitialize : function() {
this.nameEl = this.down('#name');
this.quantityEl = this.down('#quantity');
this.imageEl = this.down('#cartimage');
this.tasteEl = this.down('#taste');
this.priceEl = this.down('#price');
//this.totalSumEl = this.down('#totalSum');
},
//该方法需要在datatitem调用该方法
setPicImage : function(picImage) {
console.log(picImage);
//console.log(this.imageEl);
this.imageEl.setSrc(picImage)
},
setOwnName : function(ownName) {
this.nameEl.setHtml(ownName)
},
setPrice : function(price) {
this.priceEl.setHtml('价格¥' + price)
},
setQuantity : function(quantity) {
this.quantityEl.setValue(quantity)
}
})
dataitem的定义:
Ext.define('DingCan.view.Items', {
extend : 'Ext.dataview.component.DataItem',
xtype : 'cartitem',
config : {
dataMap : {
getMyComp : {
//里面的方法就是你需要从迭代中调用的,src就是store里面的字段,在后面我们会用到怎么去将store赋值
setPicImage : 'src',
setOwnName:'name',
setQuantity:'quantity',
setPrice:'price'
}
},
myComp : {
//调用之前的模版并定义为一个component
xtype : 'mydataview'
}
},
applyMyComp : function(config) {
return Ext.factory(config, 'DingCan.view.CartItem', this.getMyComp());
},
updateMyComp: function(newMyComp, oldMyComp) {
if (newMyComp) {
this.add(newMyComp);
}
//debugger;
if (oldMyComp) {
this.remove(oldMyComp);
}
}
});
itemlist也就是最后调用的界面,注意必须啊是dataview
Ext.define('DingCan.view.ItemsList', {
extend: 'Ext.DataView',
xtype: 'itemslist',
requires: [
'DingCan.view.Items'
],
config: {
useComponents: true,
defaultType: 'cartitem',
cls: 'cart-items-list',
scrollable: 'vertical'
},
initialize : function() {
this.callParent(arguments);
}
});
调用方法并迭代
var currentList = Ext.create('DingCan.view.ItemsList');
//读取store
var cartStore = Ext.getStore('cartitems');
//将store的赋值给dataitem 的list
currentList.setStore(cartStore);
this.getList().push(currentList);
item的模版,也就是模版的迭代部分
/**
* @author larrywoo Email:larrywoo1982@gmail.com
*/
Ext.define('DingCan.view.CartItem', {
extend : 'Ext.Container',
xtype : 'mydataview',
requires : ['Ext.Label'],
config : {
//scrollable : true,
//此处的fullscreen要慎用。不然dataview不能显示
//fullscreen : true,
layout : 'vbox',
items : [{
xtype : 'container',
layout : 'hbox',
items : [{
//id : 'image',
itemId : 'cartimage',
xtype : 'image',
mode : 'tag',
src : '',
cls : 'cart-item-thumb'
},
{
xtype : 'container',
flex : 1,
layout : 'vbox',
items : [{
itemId : 'name',
//id : 'name',
html : '产品名称',
cls : 'cart-item-name'
}, {
xtype : 'container',
cls : 'cart-item-props',
layout : 'vbox',
items : [{
itemId : 'price',
//id : 'price',
html : '价格:¥4.00',
cls : 'item-prop'
}, {
itemId : 'taste',
//id : 'taste',
html : '麻辣,少蒜少葱',
cls : 'item-prop'
}]
}]
}
]
}, {
itemId : 'quantity',
//id : 'quantity',
xtype : 'spinnerfield',
label : '数量',
labelWidth : '60%',
labelWrap : true,
labelAlign : 'right',
increment : 1,
minValue : 1,
maxValue : 50
}]
},
initialize : function() {
this.callParent(arguments);
},
beforeInitialize : function() {
this.nameEl = this.down('#name');
this.quantityEl = this.down('#quantity');
this.imageEl = this.down('#cartimage');
this.tasteEl = this.down('#taste');
this.priceEl = this.down('#price');
//this.totalSumEl = this.down('#totalSum');
},
//该方法需要在datatitem调用该方法
setPicImage : function(picImage) {
console.log(picImage);
//console.log(this.imageEl);
this.imageEl.setSrc(picImage)
},
setOwnName : function(ownName) {
this.nameEl.setHtml(ownName)
},
setPrice : function(price) {
this.priceEl.setHtml('价格¥' + price)
},
setQuantity : function(quantity) {
this.quantityEl.setValue(quantity)
}
})
dataitem的定义:
Ext.define('DingCan.view.Items', {
extend : 'Ext.dataview.component.DataItem',
xtype : 'cartitem',
config : {
dataMap : {
getMyComp : {
//里面的方法就是你需要从迭代中调用的,src就是store里面的字段,在后面我们会用到怎么去将store赋值
setPicImage : 'src',
setOwnName:'name',
setQuantity:'quantity',
setPrice:'price'
}
},
myComp : {
//调用之前的模版并定义为一个component
xtype : 'mydataview'
}
},
applyMyComp : function(config) {
return Ext.factory(config, 'DingCan.view.CartItem', this.getMyComp());
},
updateMyComp: function(newMyComp, oldMyComp) {
if (newMyComp) {
this.add(newMyComp);
}
//debugger;
if (oldMyComp) {
this.remove(oldMyComp);
}
}
});
itemlist也就是最后调用的界面,注意必须啊是dataview
Ext.define('DingCan.view.ItemsList', {
extend: 'Ext.DataView',
xtype: 'itemslist',
requires: [
'DingCan.view.Items'
],
config: {
useComponents: true,
defaultType: 'cartitem',
cls: 'cart-items-list',
scrollable: 'vertical'
},
initialize : function() {
this.callParent(arguments);
}
});
调用方法并迭代
var currentList = Ext.create('DingCan.view.ItemsList');
//读取store
var cartStore = Ext.getStore('cartitems');
//将store的赋值给dataitem 的list
currentList.setStore(cartStore);
this.getList().push(currentList);
相关文章推荐
- Sencha Touch 二 - Dataview里面实现items迭代并初始化items的一些属性
- Sencha touch 开发系列:容器组件:dataview,list
- Sencha Touch 1.x 用scroller实现滚到底部加载更多
- Sencha Touch 自定义List的三种实现方案
- Sencha Touch 2 中 listpaging 与 pullrefresh 2个插件的使用(分页功能实现)
- android里面shape属性用代码实现圆角背景的工具类
- zookeeper+mesos+marathon+docker里面的一些小功能实现
- Repeater的 Items属性、Items里面的控件有几个?
- sencha-touch下借助phoneGap实现拍照,二维码的功能
- CoreData 数据库表里面一些字段属性
- Sencha Touch 2 实现跨域访问
- SenchaExt中的DataView实现table布局效果
- 里面是对一个body的属性进行server的一些设定,不过可以衍生到其他的一些htmlcontrol
- sencha touch 2.1 list dataview 中禁用masked的办法
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- 创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后载实现接口中的定义的CompareTo方法,将对象按编号升序排列。根据已有的代码,补全程序。
- [Phonegap+Sencha Touch] 移动开发67 安卓实现 新版提示更新并下载安装(自动更新插件)
- sencha touch list infinite 属性
- Sencha Touch 2.1 Chart属性中文解释
- 从今天看算法导论实现里面的一些伪代码