我正在使用Sencha Touch和sqLite代理处理项目,您可以找到here。这个网站是在一个phonegap环境中,但是当我从浏览器运行它时它不会被使用。
我有WorkShift
商店使用的WorkShifts
模型。
模型:
Ext.define('KCS.model.WorkShift', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'id', type: 'int' },
{ name: 'WorkShiftID', type: 'int' },
{ name: 'StartDate', type: 'date' },
{ name: 'ClosureDate', type: 'date' },
],
proxy: {
type: 'sqlitestorage',
dbConfig: {
tablename: 'tbl_WorkShift',
dbConn: KCS.util.InitSQLite.getConnection()
}
}
}
});
商店:
Ext.define('KCS.store.WorkShifts', {
extend: 'Ext.data.Store',
requires: ['KCS.model.WorkShift'],
config: {
model: 'KCS.model.WorkShift',
autoLoad: true,
storeId: 'WorkShifts',
pageSize: 1000
}
});
现在,在我的控制器中,我想查看是否有已打开的WorkShift
(如果应用已崩溃或已关闭而未关闭上一个Workshift
。)所以我使用这样的启动回调:
launch : function(){
var workShifts = Ext.getStore('WorkShifts');
workShifts.clearFilter(true);
var openedWS = workShifts.findBy( function( record ){
return (record.get("StartDate") != null) &&
(record.get("ClosureDate") == null);
});
if( openedWS != -1 ){
// do stuff when an opened WS is found
}
else{
// do normal stuff
}
},
我做了一堆测试,首先,sqLite中有一堆有效的条目,我可以从商店和模型创建WS。还有一个条目符合findBy
bool测试。我已经尝试了workShifts.getCount()
甚至workShifts.getAllCount()
,但这两个函数都返回0.我做错了什么?
修改:
我还搜索了在商店可以从代理加载数据之前运行的启动功能,甚至还没有启动deviceReady回调。我试图在商店中应用过滤器并检查getFirst()
是否有人幸存到测试,但我认为即使他们出现在SqLite概述中也没有一个记录要测试从“资源”选项卡(在chrome webTools中)。
答案 0 :(得分:0)
我使用了商店的手动加载功能,并使用回调来完成我需要的操作。商店创建中的autoload参数也是异步的。那是我的问题。
http://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.Store-method-load
像这样:launch : function(){
var workShifts = Ext.getStore('WorkShifts');
workShifts.load({
callback: function(records, operation, success) {
workShifts.clearFilter(true);
var openedWS = workShifts.findBy( function( record ){
return (record.get("StartDate") != null) &&
(record.get("ClosureDate") == null);
});
if( openedWS != -1 ){
// do stuff when an opened WS is found
}
else{
// do normal stuff
}
},
scope: this
});
},