这是我的模特:
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中发现了同样的问题。
答案 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;
},