您的位置:首页 > 其它

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

2012-08-24 12:58 260 查看
前提条件:在实际应用中我们需要将数据保存到本地中。数据之前有一对多的关系。例如:我有一张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 论坛上也未找到答案。如果有知道的朋友。可以告诉我
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: