0

我正在使用 Sencha Touch 和 sqLite 代理进行项目,您可以在此处找到。这个网站是在 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
    }
});

现在,在我的Controller中,我想看看是否有一个打开的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布尔测试的条目。我试过workShifts.getCount()了,workShifts.getAllCount()但两个函数都返回 0。我做错了什么?

编辑
我还搜索了诸如在商店可以从代理加载数据之前运行的启动函数之类的东西,甚至是科尔多瓦没有触发 deviceReady 回调。我试图在商店中应用过滤器并检查getFirst()是否有一个人在测试中幸存下来,但我认为即使它们出现在“资源”选项卡的 SqLite 概述中(在 chrome web 工具中)。

4

1 回答 1

0

我使用了商店的手动加载功能并使用回调来做我需要的事情。store 创建中的 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
    });
},
于 2013-10-03T19:02:11.700 回答