ExtJs存储没有找到记录,但最近保存了一个

时间:2013-10-02 14:02:51

标签: javascript extjs

我正在使用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中)。

1 个答案:

答案 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
    });
},