sencha touch 2 怎么将 hasMany 的数据保存到localstorage

前提条件:在实际应用中我们需要将数据保存到本地中。数据之前有一对多的关系。例如:我有一张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 论坛上也未找到答案。如果有知道的朋友。可以告诉我


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值