前提条件:在实际应用中我们需要将数据保存到本地中。数据之前有一对多的关系。例如:我有一张order model,对应orderitem model从属于order model。并且我们需要将order model保存到store里面。并且store是localstorage。
具体参考国外一篇帖子:
http://www.sencha.com/forum/showthread.php?220305-Problem-with-localstorage-store-and-model-with-hasMany-association
order model:
Ext.define('DingCan.model.Order', {
extend : 'Ext.data.Model',
config : {
fields : [{
name : 'id',
type : 'int'
}, {
name : 'ordername',
type : 'string'
}, {
name : 'orderdate',
type : 'string'
}],
associations : [{
type : 'hasMany',
model : 'DingCan.model.OrderItem',
associationKey : 'orders',
foreignKey : 'order_id',
name : 'orders',
autoLoad : true,
store : {
model : 'DingCan.model.OrderItem',
proxy : {
type : 'localstorage',
id : 'products'
}
}
}]
}
});
OrderItem model:
Ext.define('DingCan.model.OrderItem', {
extend : 'Ext.data.Model',
config : {
fields : [{
name : 'id',
type : 'int'
}, {
name : 'order_id',
type : 'int'
}, {
name : 'itemname',
type : 'string'
},{
name : 'price',
type : 'int'
},{
name : 'des',
type : 'string'
},{
name : 'subtotal',
type : 'int'
},{
name : 'src',
type : 'string'
}],
belongsTo: 'DingCan.model.Order'
}
});
order store:
Ext.define('DingCan.store.Order', {
extend : 'Ext.data.Store',
requires:['Ext.data.proxy.LocalStorage'],
config : {
model : 'DingCan.model.Order',
proxy : {
type : 'localstorage',
id : 'myorders'
},
autoLoad : true,
autoSave : true,
storeId : 'orders'
}
})
具体操作:
创建一个order的model
var order = Ext.create('DingCan.model.Order',{ordername:'订单',orderdate:Ext.Date.format(new Date(),'j/d/Y')})
var items = order.orders();
实际上调用order.orders()后返回的是一个store
var items = order.orders();
如果item存在时候我们就清掉里面的数据
if (items){
console.log('clear items');
items.getProxy().clear();
//清空数据后重新load一次数据,不然以前的数据不会清楚掉
items.load();
}
往items里面添加数据。
items.add({itemname:‘123’,des:‘test’,price:34,subtotal:56,src:‘path to your file’});
注意一定要同步
items.sync();
获取order store,通过storeID获取
store = Ext.getStore('orders');
重新加载store
store.load();
将之前的order model保存到order store里面
store.add(order);
同步store
store.sync();
到此store被保存到了本地,并且这种复杂关联数据也被保存
访问order store 可以通过遍历方式读取数据,怎么遍历里面一对多的数据?我们可以通过用model.orders()获取到orderitem的store,model就是当前order的一条数据。
貌似store遍历方法还有另外一种store.each(function(record){
record.get('itemname');
}) //但是该方法没有验证过
var length = model.orders().data.items.length;
遍历store 注意item下标是0开始的。
for(i=0;i<length;i++){
//用改方法可以获取到store里面的数据
mystring += model.orders().data.items[i].data.src;
model.orders().data.items[i].data.src;
model.orders().data.items[i].data.itemname;
model.orders().data.items[i].data.des;
model.orders().data.items[i].data.price;
model.orders().data.items[i].data.subtotal
};
注意:现在该方法有个问题,第二次存入的orderitem的值会覆盖前面的值。在sencha touch 论坛上也未找到答案。如果有知道的朋友。可以告诉我