Javascript 根据一定条件向ExtJs存储添加回调函数

Javascript 根据一定条件向ExtJs存储添加回调函数,javascript,extjs,callback,extjs4.1,extjs-stores,Javascript,Extjs,Callback,Extjs4.1,Extjs Stores,我使用的是ExtJS4.1。在UI上,我有两个按钮-btnOne和btnTwo。我有一个商店,我点击两个按钮后加载 我想要的:点击任何按钮,我仍然想加载存储,但点击btnOne,我想加载存储,当加载存储时,我想调用回调函数。我无法在存储加载时添加回调函数,因为我只想在单击btnOne时调用回调函数 我查看了&load方法,它实际上允许回调函数 store.load({ scope: this, callback: function(records, operation, succ

我使用的是ExtJS4.1。在UI上,我有两个按钮-btnOne和btnTwo。我有一个商店,我点击两个按钮后加载

我想要的:点击任何按钮,我仍然想加载存储,但点击btnOne,我想加载存储,当加载存储时,我想调用回调函数。我无法在存储加载时添加回调函数,因为我只想在单击btnOne时调用回调函数

我查看了&load方法,它实际上允许回调函数

store.load({
    scope: this,
    callback: function(records, operation, success) {
        // the operation object
        // contains all of the details of the load operation
        console.log(records);
    }
});
如果不需要设置回调范围,只需传递函数:

store.load(function(records, operation, success) {
    console.log('loaded records');
});
但是在我的例子中,回调函数是在存储加载之前被调用的

我不想为同一个变量维护变量。


请提出建议。

使用全局变量的想法是正确的,只是不应将变量设置为全局变量,而应设置为局部变量(对于控制器)。因此,在控制器中,为每个单击的按钮添加两个内部状态,并在存储加载回调中检查这些状态:

//in your controller:
var ctrl = this;//ctrl == this == controller
store.on('load', function() {
    if (ctrl.firstButtonClicked && ctrl.secondButtonClicked) {
        mySecondCallback(withArguments);
    }
})

在控制器级别定义回调函数,比如onStoreLoad(),然后再定义一个带有参数(回调函数指针)的函数来加载存储

 onStoreLoadComplete: function() {}

 loadStore: function(callback) {
      store.load({callback: callback});
 }
单击按钮,您可以决定是否将回调函数引用传递给第二个函数,这将解决您的问题

  onFirstButtonClick: function(){
        this.loadStore(this.callback);
  }

  onSecondButtonClick: function(){
        this.loadStore();
  }

有没有办法在不维护变量的情况下实现这一点?没有:按钮没有状态,因此您必须在变量中的某个位置维护状态。但是您可以将这些变量保存在按钮本身中:
按钮。[prefix]Clicked=true
(更改前缀以确保不会弄乱Ext框架的内部变量)。或者,您可以使用一些复选框,这些复选框一旦选中,就无法取消选中。