Sencha touch 2错误,模型的标识符生成策略不保证唯一ID,同时使用商店

时间:2014-04-17 09:53:33

标签: sencha-touch sencha-touch-2

在Sencha touch中,我定义了一个商店:

Ext.define('TestApp.store.TokenStore', {
    extend: 'Ext.data.Store',    
    config: {
        model: 'TestApp.model.TokenModel',
        autoLoad: true,
        autoSync: true,
        proxy: {
            type: 'localstorage',
            // The store's ID enables us to eference the store by the following ID.
            // The unique ID of the Store will be the ID field of the Model.
            id: 'TokenStore'
        }
    }
});

这家商店的模特:

Ext.define('TestApp.model.TokenModel', {
    extend: 'Ext.data.Model',
    config:{
        fields: [ 
            {name: 'id', type: 'int' },
            {name:'token',type:'string'}
        ]
    }
});

现在,在我的应用程序的启动功能中,我执行以下操作:

// Get the store
var tokenStore = Ext.getStore('TokenStore');

// Add a token to the store
tokenStore.add({'token': 1234});

// Retrieve that token back:
var token =  tokenStore.getAt(0).get('token');

一切正常,我在控制台中看到了令牌的值,但我收到以下警告:

[WARN][Ext.data.Batch#runOperation] Your identifier generation strategy for the model does not ensure unique id's. Please use the UUID strategy, or implement your own identifier strategy with the flag isUnique.

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在模型中的配置中添加:

identifier: {
        type: 'uuid'
    },

Sencha Touch要求所有类中的每条记录都有一个标识符。基本上,这是一个为每条记录分配字符串的类。触摸源中有javascript类生成这些类。这些类必须声明自己是唯一的或不是。 uuid是最好的,它包含在sencha touch中,并宣称自己是唯一的(如果你看一下基于时间戳的数学,有充分的理由!)

您需要唯一标识符的原因是记录不会相互混淆,特别是在涉及DOM交互或通过代理保存/加载时。

答案 1 :(得分:0)

这将消除加载/保存的警告和后续问题,否则在同一商店进行多次保存/检索后会出现问题(商店最终会被破坏)

    identifier: {
        type: 'uuid',
        isUnique : true
    },

在Chrome中测试