2013-10-02 3 views
0

Im работает над проектом с Sencha Touch и прокси-сервером sqlite вы можете найти here. Этот сайт находится в среде телефонных разговоров, но он не используется, когда я запускаю его из браузера.ExtJs Магазин не найден, но сохранен недавно

У меня есть модель 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 из магазина и модели. Также есть запись, которая соответствует тесту bool test findBy. Я пробовал workShifts.getCount() и даже workShifts.getAllCount(), но обе функции возвращают 0. Что я сделал не так?

EDIT:
Я также искал вещи, как запуск Func хода до магазина может загружать данные из прокси или даже Cordova не обжиг обратного вызова deviceReady. Я попытался применить фильтр в хранилище и проверить с getFirst(), если кто-то выжил в тесте, но я думаю, что нет даже одной записи для тестирования, в первую очередь, даже если они отображаются в обзоре SqLite на вкладке «Ресурсы» (в chrome webTools).

ответ

0

Я использовал функцию ручной загрузки в магазине и использовал обратный вызов, чтобы делать то, что мне нужно. Параметр автозагрузки в создании магазина также асинхронен. Это была моя проблема.

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 
    }); 
}, 
Смежные вопросы