Sencha Touch (1.1) - “成功”后模型未在本地存储中更新节省
我的设置
- Safari 5.1.2 (Macintosh)
- Sencha Touch 1.1
问题 过程
我
有一个模型和一个商店。我使用此处记录的 set(field,value)
方法更新记录:API - 设置。更新字段后,我使用此处记录的 save()
方法:API - 保存。
结果
绑定到商店的任何列表中的记录都会更新,并且似乎已保存,但是当我重新加载网页时,旧值显示。因此记录被更新,商店看到新数据,绑定到商店的列表刷新其显示,但本地存储中数据的实际表示永远不会更新。如果您使用浏览器控制台使用 var record = summaryStore.getAt(4)
之类的内容查找和检查项目,您会发现 dirty
属性为 false,即使尚未进行 save()
调用。此外,无论是否调用了 save()
方法,summaryStore.getUpdatedRecords()
都会返回一个空集。
更多文档
代码
存储
var summaryStore = new Ext.data.Store({
model: 'EventSummary',
storeId: 'summaryStore',
sortOnLoad: true,
sorters: [
{
property: 'date',
direction: 'DESC'
}
],
proxy: {
type: 'localstorage',
id : 'summary-cache'
}
})
模型
Ext.regModel('EventSummary', {
fields: [
{name: 'child', type: 'string'},
{name: 'date', type: 'date'},
{name: 'description', type: 'string'},
{name: 'event_id', type: 'int'}
],
proxy: summaryStore.proxy
})
示例
var record = summaryStore.findExact('event_id', 90)
record.date = new Date();
record.description = 'Vitamin K Shot`
record.save()
两者 <在 record.save()
之前和之后,dirty
标志为 false。 summaryStore.getUpdatedRecords()
在保存之前和之后都会返回一个空集。无论是否保存记录,摘要存储的所有列表都会反映所做的更改。
其他注释 存储
区由此调用填充,该调用位于存储区和模型的声明之后。 summaryStore.load()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(3)
更新
通过在将模型实例传递给商店的 add
方法之前正确实例化模型实例,可以完全避免此问题。我只是传递 JSON,商店接受了它,但显然引起了问题。
结束更新
该问题可以通过在 WebStorageProxy.js 中进行更改来解决。
请注意,更改此文件不会修改您的 sencha-touch.js 文件。您必须重建它或直接修改它
此代码不起作用
setRecord: function(record, id) {
if (id) {
record.setId(id);
} else {
id = record.getId();
}
此行特别是id = record.getId();
由于某种原因在已经存在的对象上未定义已添加到商店。解决方案是添加
if (id === undefined) {
id = record.internalId;
}
最终代码如下
setRecord: function(record, id) {
if (id) {
record.setId(id);
} else {
id = record.getId();
if (id === undefined) {
id = record.internalId;
}
}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
上面提到的 setDirty 解决方法对我不起作用,但我找到了另一种将记录保存到 WebLocalStorage 代理的解决方法:
我正在使用 1.1.1。
(顺便说一句,由于某种原因,我无法调用 save();例外情况是我需要一个 url,这不适用于 weblocalstorage。)
The setDirty workaround mentioned above didn't work for me, but I found another workaround for saving records to a WebLocalStorage proxy:
I'm using 1.1.1.
(And btw for some reason I can't call save(); the exception says I need a url, which is inapplicable to weblocalstorage.)