繁体   English   中英

根据特定条件将回调函数添加到ExtJs存储中

[英]Adding callback function to ExtJs store based on certain condition

我正在使用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');
});

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

我不想保持相同的变量。

请提出建议。

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

//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();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM