如何等到所有商店都加载到 ExtJs 中? [英] How to wait until all stores are loaded in ExtJs?

查看:23
本文介绍了如何等到所有商店都加载到 ExtJs 中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一组由五个商店驱动的组合框,我想在所有商店都完全加载后触发一个函数.这样做的推荐方法是什么?我可以做这样的事情,但感觉很笨拙:

I have a set of combo boxes that are driven by five stores and I want to fire a function once all the stores are completely loaded. What is the recommended way of doing this? I could do something like this but it feels kludgy:

var store1Loaded = false;
var store2Loaded = false;

store1.on('load', function(){
    store1Loaded = true;
});

store2.on('load', function(){
    store1Loaded = true;
});


store1.load();
store2.load();

function WaitForFunction()
{
    if (!store1Loaded || !store2Loaded)) {
       setTimeout( WaitForFunction, 100);
       return;
    }
    AllStoresLoaded();
}

function AllStoresLoaded(){
      //Do Something
}

推荐答案

使用 store.isLoading() 方法,我认为这就是它的用途.我使用它,它工作正常.

Use the store.isLoading() method, I think that is what it is for. I use it and it works fine.

  1. 在执行之前配置要加载的商店一些带有 storeId 配置的逻辑.

将这些 storeIds 放入一个数组中.

Put these storeIds into an array.

每当加载这些存储中的一个时,遍历数组,使用 Ext.getStore 查找存储并对其调用 isLoading.

Whenever one of these stores is loaded iterate through the array, lookup the store with Ext.getStore and call isLoading on it.

如果数组中没有任何存储仍在加载,请执行您的逻辑.

If none of the stores in the array are still loading, perform your logic.

例如,假设我希望在执行某些逻辑之前加载 store1store2(我以非 MVC 模式显示此内容,因为看起来您没有使用来自您的代码片段的 MVC 模式).

For example, say I want store1 and store2 loaded before I perform some logic (I am showing this in non-MVC pattern because it looks like you are not using MVC pattern from your snippet).

var store1 = Ext.create('Ext.data.Store', {
    model: myModel,
    storeId: 'store1', // store needs to be done MVC style or have this config
    proxy: {
        type: 'ajax', 
        url: 'url...',
        reader: 'json'
    },
    autoLoad: {
        callback: initData // do this function when it loads
    }
});

var store2 = Ext.create('Ext.data.Store', {
    model: myModel,
    storeId: 'store2',
    proxy: {
        type: 'ajax', 
        url: 'url...',
        reader: 'json'
    },
    autoLoad: {
        callback: initData // do this function when it loads
    }
});

// the stores to be checked
var myComboStores = ['store1', 'store2']

// function does logic if they are both finished loading
function initData() {
    var loaded = true;
    Ext.each(myComboStores, function(storeId) {
        var store = Ext.getStore(storeId);
        if (store.isLoading()) {
            loaded = false;
        }
    });
    if(loaded) {
        // do stuff with the data
    }
}

这篇关于如何等到所有商店都加载到 ExtJs 中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆