如何在Sencha Touch中使用带有唯一ID的WebSQL

时间:2014-07-16 14:01:27

标签: extjs sencha-touch local-storage store web-sql

这是我的模特:

Ext.define('myApp.model.Category', {
extend: 'Ext.data.Model',

requires: [
    'Ext.data.Field'
],

config: {
    fields: [
        {
            name: 'id',
            type: 'int'
        },
        {
            name: 'slug',
            type:'string'
        },
        {
            name: 'title',
            type:'string'
        },
        {
            name: 'post_count',
            type:'int'
        }
    ],
}});

这是我的商店:

Ext.define('myApp.store.LocalCate',{
extend: 'Ext.data.Store',

requires: [
    'Ext.data.proxy.Sql'
],

config: {
    autoLoad:false,
    model:'myApp.model.Category',
    storeId:'LocalCate',
    proxy:{
        type: 'sql',
        database: 'myApp',
        table: 'Category'
    },
}
});

现在的问题是: 当我使用store.add({id:123,slug:'123',title:'123',post_count:123});时 或store.add(Ext.create('myApp.model.Category'{id:123,slug:'123',title:'123',post_count:123}); 他们都没有成功; 当我删除'id:123'并且只添加数据

时,似乎
{slug:'123',title:'123',post_count:123}

它工作正常,当我做store.sync()时,WebSql数据库显示没有'id'的数据。 我知道,如果我将id更改为其他内容,就像'cate_id'一样,它会起作用。 但是,我希望这个'id'作为idproperty,我不想改变它的名字。 我该怎么办?你如何在sencha touch中使用websql?我在LocalStorage中发现了同样的问题。

1 个答案:

答案 0 :(得分:0)

自己回答。 模型将在创建时执行此操作

    // If it does not have an id in the data at this point, we use the one generated by the id strategy.
    // This means that we will treat this record as a phantom record from now on
    id = me.data[idProperty];
    if(!id && id !==0){
        me.data[idProperty]= me.internalId = me.id;
        me.phantom =true;

如果我创建了一个带有id的模型,那么它的幻像是假的,它告诉sencha它在数据库中有数据,这样当我同步()时,它就不会被推送到数据库。

只有我用phantom = true创建模型才能将它同步()到数据库。

这是addrecords的代码:

    getNewRecords:function(){
    returnthis.data.filterBy(function(item){
        // only want phantom records that are valid
        return item.phantom ===true&& item.isValid();
    }).items;
},