Ext JS 3.4.обратные вызовы - PullRequest
       4

Ext JS 3.4.обратные вызовы

0 голосов
/ 01 марта 2019

Я хотел бы добавить обратный вызов в созданное поле со списком, поэтому изначально я сделал это:

{
    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' listener?

1 Ответ

0 голосов
/ 01 марта 2019

Я бы передал ссылку на функцию на параметр обратного вызова.Теперь вы вызываете функцию.

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

Последняя выдаст: Я печатаю другое сообщение: привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...