Удаленные записи из магазина продолжают появляться - PullRequest
1 голос
/ 06 июля 2011

Я создал локальный магазин и модель для запоминания имени пользователя и пароля:

Магазин

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});

}

Хранилище настроено на автозагрузку и автосохранение, поэтому запускать .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;
    }

}

После этого я вижу, что хранилище пусто, НО, если я обновлю страницу (запустите приложение еще раз), все записи вернутся плюс та, которую я сохранил.

Кто-нибудь может увидеть, чего мне не хватает, чтобы сделать это правильно?

Заранее спасибо.

1 Ответ

1 голос
/ 06 июля 2011

Я наконец нашел парня, у которого точно такая же проблема .Решение:

Вы должны добавить поле с именем «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 () после каждого обновления.

...