Model Sencha Touch(1.1)-型号在“之后未在本地存储中更新”;成功的;拯救 我的设置 Safari 5.1.2(Macintosh) Sencha Touch 1.1 问题 过程

Model Sencha Touch(1.1)-型号在“之后未在本地存储中更新”;成功的;拯救 我的设置 Safari 5.1.2(Macintosh) Sencha Touch 1.1 问题 过程,model,proxy,save,sencha-touch,local-storage,Model,Proxy,Save,Sencha Touch,Local Storage,我有一个模型和一个商店。我使用此处记录的set(field,value)方法更新记录:。更新字段后,我使用此处记录的save()方法: 结果 绑定到存储和的任何列表中的记录更新似乎已保存,但是当我重新加载网页时会显示旧值。因此,记录会被更新,存储会看到新数据,绑定到存储的列表会刷新其显示,但localstorage中数据的实际表示形式永远不会更新。如果使用浏览器控制台查找并检查类似于var record=summaryStore.getAt(4)的项,则即使未进行save()调用,也会发现dir

我有一个模型和一个商店。我使用此处记录的
set(field,value)
方法更新记录:。更新字段后,我使用此处记录的
save()
方法:

结果 绑定到存储和的任何列表中的记录更新似乎已保存,但是当我重新加载网页时会显示旧值。因此,记录会被更新,存储会看到新数据,绑定到存储的列表会刷新其显示,但localstorage中数据的实际表示形式永远不会更新。如果使用浏览器控制台查找并检查类似于
var record=summaryStore.getAt(4)
的项,则即使未进行
save()
调用,也会发现
dirty
属性为false。另外,
summaryStore.getUpdateRecords()
返回一个空集,无论是否调用了
save()
方法

进一步文件

代码 商场 模型 例子 在
record.save()之前和之后,
dirty
标志都是false
summaryStore.getUpdateRecords()
在保存之前和之后都返回一个空集。无论记录是否保存,汇总存储的所有列表都会反映所做的更改

附加说明 存储区将填充此调用,该调用遵循存储区和模型的声明
summaryStore.load()

使用存储上的sync()方法将数据持久化到本地存储

请尝试以下代码,而不是上面的示例:

var record = summaryStore.findExact('event_id', 90)
record.set('date', new Date());
record.set('description', 'Vitamin K Shot`);
record.save();

summaryStore.sync();
使用存储上的sync()方法将数据持久化到localstorage

请尝试以下代码,而不是上面的示例:

var record = summaryStore.findExact('event_id', 90)
record.set('date', new Date());
record.set('description', 'Vitamin K Shot`);
record.save();

summaryStore.sync();

更新

通过在将模型实例传递到存储的
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;
        }
    }

更新

通过在将模型实例传递到存储的
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代理的解决方案:

record.set('field1', 'abc');
store.proxy.setRecord(record);
我用的是1.1.1。
(顺便说一句,由于某些原因,我无法调用save();例外情况是我需要一个url,该url不适用于weblocalstorage。)

上述setDirty解决方案对我不起作用,但我找到了另一个将记录保存到weblocalstorage代理的解决方案:

record.set('field1', 'abc');
store.proxy.setRecord(record);
我用的是1.1.1。
(顺便说一句,由于某些原因,我无法调用save();例外情况是我需要一个url,它不适用于weblocalstorage。)

不幸的是,在这种情况下,这不起作用。存储实际上无法识别更改
summaryStore.getUpdateRecords()
返回一个空集。设置值后,请尝试model.setDirty()。不幸的是,这也不起作用。最后,我不得不对WebStorage Proxy对象进行源代码更改。不幸的是,在这种情况下,这不起作用。存储实际上无法识别更改
summaryStore.getUpdateRecords()
返回一个空集。设置值后,请尝试model.setDirty()。不幸的是,这也不起作用。最后,我不得不对WebStorageProxy对象进行源代码更改。