1

Ext JS 4 のコンボ ボックス リスナーからカスタム関数を呼び出す際に問題が発生しました。以下のようにコンボ ボックス リスナーをセットアップしました。

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

そして、私のカスタム関数は、の閉鎖後に作成したものです

 this.callParent(arguments);

私のカスタム関数は

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

私は何を間違っていますか?

4

2 に答える 2

2

あなたのスコープが間違っています.selectthis関数はコンボを参照しており、おそらくテスト関数がオンになっているオブジェクトを参照していません. また、関数を呼び出す場合は、中かっこが必要です。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();
}

テスト関数のスコープとコンボボックスのスコープを知る必要があるため、さらにコードを投稿することをお勧めします。

于 2013-02-20T14:15:40.830 に答える
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;
于 2013-02-20T14:20:28.917 に答える