Sencha Touch localstore代理在删除记录后不删除索引

时间:2012-06-02 14:39:05

标签: javascript touch extjs

我在使用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方法之前数据存储的屏幕截图: enter image description here

以下是一个: enter image description here

请注意,ID仍会保留在商店列表中,这会在刷新页面时给出未定义的错误。

2 个答案:

答案 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',因为这是我认为文档建议但我可能错了.. 看看