我在使用Sencha Touch数据存储和localproxy时遇到了一些麻烦。基本上,当使用store.remove(record)方法从存储中删除记录时,记录本身将从内存中删除,但是商店中对它的Id引用不会被删除,所以当页面刷新时,我收到一个可爱的“Uncaught TypeError:无法读取属性'isModel'未定义”
以下是商店的代码:
Ext.define("App.store.Data", {
extend: "Ext.data.Store",
requires: "Ext.data.proxy.LocalStorage",
config: {
model: "App.model.Data",
autoSync: true,
proxy: {
type: 'localstorage',
id: 'app-store'
}
}
});
以下是数据编辑器页面上删除按钮的代码
onDeleteHomeworkCommand: function () {
var dataEditor = this.getDataEditor();
var currentData = dataEditor.getRecord();
var dataStore = Ext.getStore("Data");
dataStore.remove(currentData);
dataStore.sync();
this.activateDataList();
},
修改
以下是调用remove方法之前数据存储的屏幕截图:
以下是一个:
请注意,ID仍会保留在商店列表中,这会在刷新页面时给出未定义的错误。
答案 0 :(得分:5)
问题是当您删除记录时,本地存储代理不会从其内部ID列表中删除ID。如果使用destroy()显式销毁代理中的记录,则可以解决此问题。
答案 1 :(得分:1)
这是localstorage
代理和stores
在sencha touch中的一个已知问题,因为defualt sencha将 id设为int 因此问题当它们不存在时就会出现。我在一个sencha论坛找到了解决这个问题的方法,它对我有用
这是该线程http://www.sencha.com/forum/showthread.php?151741-remove-record-from-localstorage的链接
解决方案是在sencha touch的源代码中编辑一行代码,这里就是
现在我解决了ids没有清理的问题。
使用getID返回Int,但id列表是一个字符串数组
//This line doesn't work circa 32196
Ext.Array.remove(newIds, records[i].getId());
//Replace it with this one works fine.
Ext.Array.remove(ids, records[i].getId().toString());
这可能是因为我的模型使用'int'类型的'id',因为这是我认为文档建议但我可能错了.. 看看