0

我正在使用 ExtJS 4.1。在 UI 上,我有两个按钮 - btnOne 和 btnTwo。我有一个商店,我在点击两个按钮后加载它。

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

我查看了商店加载文档和加载方法实际上允许回调函数。

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');
});

但在我的情况下,回调函数在商店加载之前被调用。

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

请建议。

4

2 回答 2

0

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

//in your controller:
var ctrl = this;//ctrl == this == controller
store.on('load', function() {
    if (ctrl.firstButtonClicked && ctrl.secondButtonClicked) {
        mySecondCallback(withArguments);
    }
})
于 2015-06-01T13:18:19.433 回答
0

在控制器级别定义您的回调,例如 onStoreLoad(),以及一个带有参数(回调函数指针)的函数,专门用于加载存储。

 onStoreLoadComplete: function() {}

 loadStore: function(callback) {
      store.load({callback: callback});
 }

单击按钮时,您可以决定是否要将回调函数引用传递给第二个函数,这将解决您的问题。

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

  onSecondButtonClick: function(){
        this.loadStore();
  }
于 2016-03-10T18:32:45.727 回答