【问题标题】:Ext Store proxy called too early过早调用 Ext Store 代理
【发布时间】:2013-05-06 07:08:48
【问题描述】:

我有一个带有自定义 JSON 阅读器的 Ext/Sencha 存储代理。我注意到阅读器(因此,代理)在使用之前就被调用了。应用启动流程是这样的:

  • 获取地理位置
  • 将其存储为全局变量(命名空间)
  • 进行 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();

app/store/Stations.js

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

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

app/store/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);
  },
  ...
});

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这也发生在我身上。但是,我将在哪里创建和加载商店?现在我的主视图有items:[{xtype:'stations'}]stations 视图只是声明config:{store:'Stations',...。所以,不知何故,我不得不使用Ext.create 创建我的商店,加载它,然后我必须将此商店实例设置为stations 视图,而这又不是手动创建的。显然我仍然对 Sencha Touch 应用程序接线感到困惑。
    • 你有存储类定义的文件吗? autoLoad 会去那里。所以你不需要创建它 - 它会自动创建。您只需要根据您的逻辑在必要时加载它。
    • 是的,我明白了,只是不确定是否能控制这家商店。为了完整起见,现在还将商店和阅读器代码片段添加到问题中。我在商店中设置了autoLoad: false,并在app.js 中调用了Ext.getStore('Stations').load(),就在Ext.fly 之前。这似乎工作正常。谢谢。
    • 你去。 store 对象是静态的,每个应用程序每个 store 一个。所以每当你做 Ext.getStore() 你只是那个商店实例。你可以随心所欲地使用它。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2014-02-23
    • 2013-02-19
    • 2015-05-21
    • 2011-03-22
    • 2012-10-31
    • 2015-12-04
    • 2013-05-28
    相关资源
    最近更新 更多