我成功尝试了sencha touch app示例显示here
他们使用商店代理类型作为 localstorage ,它的工作正常,然后我将代理类型更改为sql,如下所示
Ext.define('notesApp.store.Notes', {
extend : 'Ext.data.Store',
requires : 'Ext.data.proxy.Sql',
config : {
model : 'notesApp.model.Note',
proxy : {
type : 'sql',
database: "SqlProxyTest",
table: "Notes",
id : 'notes-app-store'
},
sorters : [{property : 'dateCreated', direction : 'DESC'}],
grouper : {
sortProperty : 'dateCreated',
direction : 'DESC',
groupFn : function(record) {
if(record && record.data.dateCreated) {
return record.data.dateCreated.toString();
}
return '';
}
}
}
});
没有错误。 我可以插入数据,我可以在列表视图中看到记录,但是chrome资源显示“节点表为空”。 如果我刷新浏览器,则记录将从列表中消失。
我是否遗漏了任何东西,或者是在sencha touch中使用sql代理的正确方法吗?
答案 0 :(得分:4)
如果您更改了模型(添加字段),则必须删除该表并重新创建它。 当您在数据存储区中添加新行时,请确保放置所有字段。
示例如果我的模型包含firstName,lastName,email:
// This one is not added cause email is absent
Ext.getStore('Users').add([{
firstName: 'Toto',
lastName: 'test',
}]);
// This one is added
Ext.getStore('Users').add([{
firstName: 'toto',
lastName: 'test',
email : 'toto@test.te'
}]);
答案 1 :(得分:2)
我犯的错误是,我创建了我想要插入的记录的id,正如他们在该演示示例中所示,当我在
之后更改模型时 Ext.define("NotesApp.model.Note", {
extend: "Ext.data.Model",
config: {
idProperty: 'id',
fields: [
{ name: 'id', type: 'int' },
{ name: 'dateCreated', type: 'date', dateFormat: 'c' },
{ name: 'title', type: 'string' },
{ name: 'narrative', type: 'string' }
]
}
});
以强>
Ext.define('notesApp.model.Note', {
extend : 'Ext.data.Model',
config : {
fields : [
{ name : 'dateCreated', type : 'string', dateFormat : 'D'},
{ name : 'title', type : 'string'},
{ name : 'narrative', type : 'string'}
],
validations : [
{type : 'presence', field : 'dateCreated'},
{type : 'presence', field : 'title', message : 'Please enter a title for the note!'}
]
}
});
一切正常。