从Ext JS 4组合框侦听器调用函数

时间:2013-02-20 14:09:57

标签: extjs extjs4 extjs-mvc

我在Ext JS 4中从组合框侦听器调用自定义函数时遇到问题。 我已经设置了如下的组合框监听器。

listeners:{
    select:{
        fn:function(combo, value) {
            this.test;
        }
    }
}

我的自定义功能是我在

结束后创建的
 this.callParent(arguments);

我的自定义功能

  test: function(){
        alert('test');
  }

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的范围错误,您的选择功能中的this指的是您的组合,可能没有您的对象您的测试功能已启用。此外,如果你打电话给一个功能,你需要围绕它:this.test()

可能更好的方式如下:

initComponent: function() {  
    var me = this;
    me.items = [//... 
    {
       xtype: 'boxselect',
       //props...
       listeners: {
           select:{
               fn:function(combo, value) {
                   this.test(); // this will now be the this variable that you give to your scope.
                   //Or simply: me.test();
               }
           },
           scope: me
       }
    }
    //...
    ];

    me.callParent();
}

您可能希望发布更多代码,因为我们需要了解测试功能的范围和组合框的范围。

答案 1 :(得分:1)

以下是我的代码

  initComponent: function() {           
            this.items = [
            {
                    xtype: 'form',
                    padding: '5 5 0 5',
                    autoScroll:true,
                    border: false,
                    style: 'background-color: #fff;',
                      items: [
                      {
                            xtype:'fieldset',

                        columnWidth: 0.5,
                        id:'adfieldset',
                        title: 'Ad Details',
                        collapsible: true,
                        defaultType: 'textfield',
                        defaults: {anchor: '100%'},
                        layout: 'anchor',

                          items: [
                          {
                                    xtype : 'boxselect',
                                    store : 'product.CategoryComboBox',
                                    name: 'category[]',
                                    id:'category',
                                    displayField: 'name',
                                    valueField: 'idProductCategory',
                                    multiSelect : false,
                                    fieldLabel: 'Category',
                                    //allowBlank: false,
                                    allowQueryAll : false,
                                    multiSelect : true,
                                    forceSelection : true,
                                    typeAhead: true,
                                    triggerAction: 'all',
                                    delimiter : ',',
                                    width: 300,
                                    queryMode:'local',


                                    listeners:{select:{fn:function(combo, value) {
                                       this.test;