Sencha touch 从存储中删除的记录会不断显示

Sencha touch 从存储中删除的记录会不断显示,sencha-touch,local-storage,Sencha Touch,Local Storage,我创建了一个本地存储和模型,用于记住用户名和密码: 存储: ToolbarDemo.stores.localsettingsstore = new Ext.data.Store({ model: 'UserSettings', proxy: new Ext.data.LocalStorageProxy( { id: 'data', proxy: { idProperty: 'id'

我创建了一个本地存储和模型,用于记住用户名和密码:

存储

ToolbarDemo.stores.localsettingsstore = new Ext.data.Store({
    model: 'UserSettings',
    proxy: new Ext.data.LocalStorageProxy(
    {
        id: 'data',
        proxy: 
        {
            idProperty: 'id'
        }
    }),
    autoLoad: true,
    autoSave: true,
    listeners:
    {
        beforesync: function()
        {
            console.log("SYNCING");
            console.log("Number of data: ");
            console.log(this.getCount());
        },
        datachanged: function()
        {
            console.log(this.getProxy());
            console.log("DATA CHANGED");
            console.log("Number of data: ");
            console.log(this.getCount());
        }
    }

});
Ext.regModel('UserSettings', {
    fields: [
        {name: 'username', type: 'string'},
        {name: 'password', type: 'string'},
        {name: 'storeUsernamePassword', type: 'boolean'}
    ]
});
型号

ToolbarDemo.stores.localsettingsstore = new Ext.data.Store({
    model: 'UserSettings',
    proxy: new Ext.data.LocalStorageProxy(
    {
        id: 'data',
        proxy: 
        {
            idProperty: 'id'
        }
    }),
    autoLoad: true,
    autoSave: true,
    listeners:
    {
        beforesync: function()
        {
            console.log("SYNCING");
            console.log("Number of data: ");
            console.log(this.getCount());
        },
        datachanged: function()
        {
            console.log(this.getProxy());
            console.log("DATA CHANGED");
            console.log("Number of data: ");
            console.log(this.getCount());
        }
    }

});
Ext.regModel('UserSettings', {
    fields: [
        {name: 'username', type: 'string'},
        {name: 'password', type: 'string'},
        {name: 'storeUsernamePassword', type: 'boolean'}
    ]
});
如果用户希望存储用户名和密码,将调用此函数:

function setLocalUsernameAndPassword(localUsername, localPassword, bStoreUsernameAndPassword)
{
    removeLocalUsernameAndPassword(false); // Remove all previous inputs (Should just be one)
    ToolbarDemo.stores.localsettingsstore.add({username: localUsername, password: localPassword, storeUsernamePassword: bStoreUsernameAndPassword});

}
存储设置为autoload和autosave,因此不必在存储上运行.sync()

如果用户选择不存储用户名和密码,我将通过调用以下命令从存储中删除所有记录:

function removeLocalUsernameAndPassword(bClearFields)
{
    //ToolbarDemo.stores.localsettingsstore.removeAll();
    ToolbarDemo.stores.localsettingsstore.each(function(record)
    {
        console.log("Removing " + record.data.username);
        ToolbarDemo.stores.localsettingsstore.remove(record);
    });

    if(bClearFields)
    {
        Ext.getCmp("usernameField").value = "";
        Ext.getCmp("passwordField").value = "";
        Ext.getCmp("checkboxStoreUserInfo").checked = false;
    }

}
之后,我可以看到商店是空的,但如果我刷新页面(再次启动应用程序),所有记录都会返回,加上我存储的记录

有人能看出我在正确地完成这件事上遗漏了什么吗


提前谢谢。

我终于找到了一个有经验的人。 解决方案:

您必须添加一个名为“id”的字段,并键入“int”。 这使sencha能够删除记录

Ext.regModel('UserSettings', {
    fields: [
        {name: 'id', type: 'int'},
        {name: 'username', type: 'string'},
        {name: 'password', type: 'string'},
        {name: 'storeUsernamePassword', type: 'boolean'}
    ]
});

每次更新之后,我都要做一个store.save()。

我终于找到了一个拥有它的家伙。 解决方案:

您必须添加一个名为“id”的字段,并键入“int”。 这使sencha能够删除记录

Ext.regModel('UserSettings', {
    fields: [
        {name: 'id', type: 'int'},
        {name: 'username', type: 'string'},
        {name: 'password', type: 'string'},
        {name: 'storeUsernamePassword', type: 'boolean'}
    ]
});
完成此操作后,我还必须在每次更新后执行store.save()