Ext JS 3.4。回调

时间:2019-03-01 07:28:32

标签: javascript extjs

我想向创建的组合框添加回调,所以最初我是这样做的:

{
    fieldLabel    : i18n._('Department code'),
    xtype         : 'combo',
    ...
    store         : ...,
    listeners     : {
        scope   : this,
        'select': function(index) {
                      self.getListOfPossibleDrives(index);
                  }
    }
}

尽管它可以工作,但我认为这并不是一个干净的解决方案,因为我只希望保留回调函数。

所以我做到了:

{
    fieldLabel    : i18n._('Department code'),
    xtype         : 'combo',
    ...
    store         : ...,
    listeners     : {
        scope   : this,
        'select': self.getListOfPossibleDrives(chosenBook)
    }
}

但是自然地,我现在有未解决的变量chosenBook。是否可以在不从'select'侦听器调用“自然”功能的情况下为索引变量提供回调?

1 个答案:

答案 0 :(得分:1)

我会将函数的w引用传递给回调参数。您现在正在做的就是调用该函数。

// Definition of the callback function 
this.getListOfPossibleDrives = function (chosenBook) {
     // Your code when a book is selected
}

// Configuration for the comboBox
var config = {
    fieldLabel    : i18n._('Department code'),
    xtype         : 'combo',
    ...
    store         : ...,
    listeners     : {
        scope   : this,
        'select': self.getListOfPossibleDrives
    }
}

在参数或对象中执行 somefunction()(带有括号/括号)时,您实际上是在调用该函数,因此您在配置中需要的是或在您定义该函数时在一开始就已经做了,或者传递了对另一个函数的引用。

这不是魔术,只是可以将函数作为参数传递。例如,您可以这样:

this.myFunctionOne = function (myStringParam) {
    // Do things
}

this.anotherFunction = function (callback) {
    // Do things... and call a callback function received as param
    callback('hello');
}

this.anotherFunction(this.myFunctionOne);

// Or you can do directly
this.anotherFunction(function(param) {
    console.log(param);
});

// With ES6 syntax
this.anotherFunction((param) => {
    console.log(param);
});

传递函数时,无需说出它需要接收的参数。

anotherFunction 将使用 hello 字符串调用回调(接收到的函数),因此根据函数的不同,它会做一件事或另一件事:

this.anotherFunction(function(param) {
    console.log('I print a different message:', param);
});

最后一个将打印:我将打印另一条消息:你好