Ext.apply不适用于ExtJS中的侦听器

时间:2013-11-08 05:36:36

标签: javascript extjs extjs4.2

我有这个小提琴

http://jsfiddle.net/beQtF/1/

现在,如果我直接在元素中编写侦听器代码,那么它可以正常工作

如果应用它,那么它将无法正常工作

 Ext.apply(cbox, {
       listeners: {
           'select': function (combo, record, index) {
               alert(combo.getValue());
           }
       }
   });

以上代码不起作用

1 个答案:

答案 0 :(得分:2)

在Ext.JS中,侦听器被添加到构造函数中,因此您无法在创建组件后对其进行配置。您可以单独创建ComboBox配置,向其应用新的侦听器集,并使用扩展配置创建ComboBox,如下所示:

var comboConfig = {
        id: 'searchInput',
        fieldLabel: 'Search:',
        enableKeyEvents: true,
        submitEmptyText: false,
        emptyText: 'search...',
        valueField: 'abbr',
        displayField: 'name',
        width: '100%',
        store: {
           fields: ['abbr', 'name'],
           data: [{
               "abbr": "AL",
                   "name": "Alabama"
           }, {
               "abbr": "AK",
                   "name": "Alaska"
           }, {
               "abbr": "AZ",
                   "name": "Arizona"
           }]
        }
};   

Ext.apply(comboConfig, {
   listeners: {
       'select': function (combo, record, index) {
           alert(combo.getValue());
       }
   }
});

var cbox = Ext.create('Ext.form.field.ComboBox', comboConfig);
Ext.create('Ext.form.Panel', {
    items: [cbox],
    frame: true,
    renderTo: Ext.getBody()
});

或者,作为CD pointed out,您可以使用on函数添加它们:

cbox.on({
    select: function(combo, record, index) {
        alert(combo.getValue());
    }
});