【问题标题】:Sencha Architect localstorage not workingSencha Architect 本地存储不起作用
【发布时间】:2013-10-03 16:15:27
【问题描述】:

我是 Sencha Touch/Architect 的新手,正在尝试创建我的第一家商店。我有以下项目设置:

商店

Ext.define('InkStudio.store.MyStore', {
    extend: 'Ext.data.Store',

    requires: [
        'InkStudio.model.activityLog'
    ],

    config: {
        data: {
            entryID: 1,
            name: 'First',
            event: 'First event'
        },
        model: 'InkStudio.model.activityLog',
        storeId: 'MyStore',
        proxy: {
            type: 'localstorage',
            uniqueID: 'entryID'
        }
    }
});

型号

    Ext.define('InkStudio.model.activityLog', {
    extend: 'Ext.data.Model',

    config: {
        identifier: 'uuid',
        fields: [
            {
                name: 'entryID',
                type: 'auto'
            },
            {
                name: 'name',
                type: 'string'
            },
            {
                name: 'event',
                type: 'string'
            }
        ]
    }
});

然后我有一个带有以下内容的按钮进行测试。该按钮正在工作,我收到两条“成功”消息,但当我查看它或为它查找文件时,数据实际上从未出现在商店中。

var store=Ext.getStore('MyStore');
if(store.add({name: "KITTY", event: "Clicked on the register"})){
    console.log("Successfully added");
}else{
    console.log("Failed to add");   
}
if(store.sync()){ 
    console.log("Successfully synced");
}else
{
    console.log("Failed to sync");
}

我是否错过了其他东西?

【问题讨论】:

    标签: javascript extjs


    【解决方案1】:

    使用data 配置仅在您希望在视图中显示固定信息时使用。正确的是:

    Ext.define('InkStudio.store.MyStore', {
        extend: 'Ext.data.Store',
    
        requires: [
            'InkStudio.model.activityLog'
        ],
    
        config: {
            model: 'InkStudio.model.activityLog',
            storeId: 'MyStore',
            proxy: {
                type: 'localstorage',
                id: 'my-store-id'
            }
        }
    });
    

    EDIT存储方法是异步的,因此您需要使用选项来实际查看更改。

    var record = Ext.create('InkStudio.model.activityLog');
    ...
    //first we load our store.
    store.load({
      callback: function(records, operation, success) {
        console.log('Store loaded...');
        //then we can add records
        store.add(record);
        store.sync({
          success: function(batch, options) {
            console.log("Record saved...");
          },
          failure : function(batch, options) {
            console.log("Error!");
          }
        });
      }
    }); 
    

    【讨论】:

    • 塞尔吉奥,感谢您的回复。根据我找到的教程,我将其中的数据作为预先存在的数据测试。我已经删除了数据并再次尝试了一切,但仍然没有任何显示。基本上为了测试它,我已经将所有东西都设置好了,然后我按下按钮触发代码,然后查看我的文件以寻找“KITTY”出现在商店中,但它没有。
    • 您还需要将您的代理从 uniqueID 更改为 id。此属性名称不存在,如果没有 id,您的本地存储将无法工作。
    • 好的,我删除了 uniqueID: 'entryID' 并将其更改为 id: 'id' 并且没有任何变化,我也尝试了 id: 'entryID' 并且也没有效果:(
    • 好的,所以我现在显然已经得到了工作代码,因为我已经完成了它,以便它进行同步,然后提醒计数。每次我按下按钮时,计数似乎都会增加。问题是这些数据似乎并没有真正保存在任何地方。我怎样才能让它保留这些添加?
    • 我再次检查了您的代码。存储的操作是异步的,因此您需要使用将在作业完成时执行的回调函数。请参阅我的答案编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多