Sencha Touch在登录后从商店加载 - 比赛问题?

时间:2014-07-14 15:41:37

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

我打算仅在用户经过身份验证后从服务器加载数据。 为简单起见,我们假设用户已经过身份验证。

我把加载数据函数调用(从商店加载数据)放在Main.js初始化函数中,如下所示。

然而, getStore('storeId')。load()函数是异步,这让我担心如果数据存储仅在主视图加载完成后完成加载可能会在没有数据的情况下加载视图(如果我错了就修复我,也许sencha可以解决这个问题,视图引用了storeId )。

针对此类问题的最佳做法是什么?

简单的解决方案:同时调用商店负载 ,但它有什么不同吗?为了以防万一,该怎么办?我尝试将同步变量设置为true但不起作用。

app.js

launch: function() {

    // Destroy the #appLoadingIndicator element
    Ext.fly('appLoadingIndicator').destroy();

    Ext.Ajax.request({
        url: MyApp.app.baseUrl + 'session/mobileCheckAuth',
        method: "POST",
        useDefaultXhrHeader: false,
        withCredentials: true,
        success: function(response, opts) {
            if (response && response.status === 200) {
                Ext.Viewport.add(Ext.create('MyApp.view.Main'));
            } else {
                Ext.Viewport.add(Ext.create('MyApp.view.LoginPanel'));
            }
        },
        failure: function(response, opts) {
            alert('Unexpected failure detected');
            Ext.Viewport.add(Ext.create('MyApp.view.LoginPanel'));
        }
    });

},

Main.js

Ext.define('MyApp.view.Main', {
...
initialize: function() {
    console.log('main.initialize');

    this.callParent(arguments);

    // Load app data
    MyApp.utils.Functions.loadData();
}

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题:

  1. 如果您的视图包含网格,则不会出现竞争条件。如果网格在商店加载完成之前呈现,则网格将使用添加的新数据更新自身。为此,您必须将商店声明为'store:“mystore”;'

  2. 如果您的复杂视图未直接绑定到商店,则必须先加载商店,然后在商店的“加载”事件中初始化视图的呈现。

  3. store.load({callback: function(){
        Ext.Viewport.add(Ext.create('MyApp.view.Main'}
    });