Extjs 登录后从商店加载Sencha Touch-种族问题?

Extjs 登录后从商店加载Sencha Touch-种族问题?,extjs,sencha-touch,sencha-touch-2,sencha-touch-2.1,Extjs,Sencha Touch,Sencha Touch 2,Sencha Touch 2.1,只有在用户通过身份验证后,我才打算从服务器加载数据。 为了简单起见,让我们假设用户已经通过身份验证 我将load data函数调用(从存储中加载数据)放在Main.js initialize函数中,如下所示 但是,getStore('storeId').load()函数是异步的,这让我担心,数据存储仅在主视图完成加载后才完成加载,这可能会导致视图加载时没有数据(如果我错了,请修复我,也许sencha可以处理这个问题,视图引用了storeId) 针对这些问题的最佳做法是什么 简单的解决方案:同步调

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

我将load data函数调用(从存储中加载数据)放在Main.js initialize函数中,如下所示

但是,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();
}

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

  • 如果您的视图由网格组成,则不存在竞争条件。如果网格在存储完成加载之前呈现,则网格将使用添加的新数据更新自身。为此,您必须将存储声明为“存储:“mystore”;”

  • 如果您有一个未直接绑定到存储的复杂视图,则必须首先加载存储,并在存储的“加载”事件中初始化视图的渲染

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

  • 我想我得到了答案,但只是为了确保:我有一个扩展了“Ext.List”的类,并且在配置中有“store:'mystore'”,这是否适用于第一个选项?网格是什么意思?视图和存储之间的自动同步记录在哪里?@user2867106。您的问题如下:1:是。2:
    Ext.grid.grid
    3:这是数据绑定而不是自动同步(
    autosync
    是存储的属性,指将更改同步到后端服务器).Databinding是MVC中的一个基本概念。我无法参考它的文档,但任何实时数据更改的示例都反映了这一基本行为。