调用Ext Store代理太早了

时间:2013-05-11 21:32:44

标签: extjs sencha-touch sencha-touch-2

我有一个带有自定义JSON阅读器的Ext / Sencha商店代理。我注意到读者(因此,代理)在使用之前被称为方式。应用程序启动过程如下:

  • 获取地理位置
  • 将其存储为全局变量(namespaced)
  • 进行AJAX通话
  • 然后创建主视图

问题

我希望在添加主视图(添加使用商店的列表)之前不调用代理。但是,如果读者经常访问第二步中设置的全局地理变量,则它为空。

我该如何解决这个问题?只有在确定了地理位置后才能调用代理。

app.js代码片段

Ext.application({
  models: ['Station'],
  stores: ['Stations'],
  views: ['Main'],
  controllers: ['Application'],

  launch: function () {
    Ext.create('Ext.util.Geolocation', {
      ...
      listeners: {
        locationupdate: function (geo) {
          // store lat/long as global variables
          Ext.Ajax.request({
            ...
            success: function (response) {
              ...
              Ext.fly('appLoadingIndicator').destroy();
              Ext.Viewport.add(Ext.create('APP.view.Main'));
            }
            ...
    }).updateLocation();

应用/存储/ Stations.js

Ext.define('SunApp.store.Stations', {
  extend: 'Ext.data.Store',
  requires: ['SunApp.store.StationReader'],

  config: {
    autoLoad: true,
    ...
    proxy: {
      ...
      reader: {
        type: 'stationReader'
      }
    }
  }
});

应用/存储/ StationReader.js

Ext.define('SunApp.store.StationReader', {
  extend: 'Ext.data.reader.Json',
  alias: 'reader.stationReader',

  getResponseData: function (response) {
    var data = this.callParent([response]);
    return this.filter(data);
  },
  ...
});

1 个答案:

答案 0 :(得分:1)

将商店的autoLoad属性设置为false,然后手动加载。