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 论坛上也未找到答案。如果有知道的朋友。可以告诉我
具体参考国外一篇帖子:
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 论坛上也未找到答案。如果有知道的朋友。可以告诉我
相关文章推荐
- Sencha touch 2 - 怎么在把list的数据动态传输到另外一个view
- Sencha touch 与PHP 怎么进行json 数据解析
- Sencha Touch 数据层篇 Proxy(下)
- sencha-touch开发的一些tips(tabPanel,提示框,store数据修改)
- Sencha Touch 载入base64格式的图片数据
- senchatouch 与PHP后台数据交互
- [Phonegap+Sencha Touch] 移动开发34 gem安装compass,不编译scss,怎么办?
- 如何在sencha touch 生成模板的阶段获得json数据
- Sencha Touch 使用Iframe 展示XML数据
- sencha touch笔记(9)——listpaging‘分页’拉取数据
- HTML5数据存储---使用clear()方法清除localStorage保存对象的全部数据
- SQL查询返回数据多列,保存在list中时,怎么取值
- Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据
- Sencha Touch 载入base64格式的图片数据
- sencha touch List下拉出现重复数据
- sencha touch笔记(11)——localstorage实现本地收藏功能以及图标的变换
- 怎么将下面的数据按车牌号保存到本地
- 活动被回收,怎么保存数据
- HTML5存储数据--localStorage长期保存数据
- Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据