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

时间:2015-06-01 13:13:16

标签: javascript extjs callback extjs4.1 extjs-stores

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

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

我查看了store load docs& 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');
});

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

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

请建议。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在Controller级别定义回调,比如说onStoreLoad(),另外还有一个带参数(回调函数指针)的函数专门加载商店。

 onStoreLoadComplete: function() {}

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

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

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

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