0

私のsenchaアプリケーションが本番環境を構築した後、ビューの一部の「fireEvent」が機能しないという奇妙な問題に遭遇しました。ビルドする前はすべて正常で、アクションは期待どおりに実行されますが、プロダクションをビルドした後、「this」によって起動された「fireEvent」は正常ですが、変数によっては正常ではないことがわかりました。以下は私のコードです。

Ext.define('WirelessCity.view.TopMenu', {
    extend:'Ext.Toolbar',
    alias:'widget.topmenu',

    initialize: function(){
        this.callParent(arguments);
                 var topMenu = this;

        var btn = {
            xtype: 'button',
            width: 42,
            margin: '5 0 5 3',
            border: '0',
            style: 'background:url(resources/images/left_btn.png);',
            handler: this.onMarkButtonTap,   // will work
            scope: this
        };

        var search = {
            width: 46,
            margin:'3 5 0 0',
            style:'background:url(resources/images/search_btn.png);border:0;background-repeat:no-repeat;',
            initialize: function(){
                this.element.on({
                    tap: function(){
                        topMenu.fireEvent('searchCmd', topMenu);    // will not work
                    }
                });
            }   
        }

        this.add([btn,  search]);
    },

    config: {
        docked: 'top',
        //flex: 1,
        height: 38,
        padding: 0,
        margin: 0,
        border: 0,
        style: 'background:url(resources/images/top.png)'
    },

    onMarkButtonTap: function(){
        //Ext.Msg.alert('mark');
        this.fireEvent('markCmd', this);
    }
});
4

1 に答える 1

0

これは、関数 ( など) ではなく、新しいコンポーネントを作成するときに構成のみを渡すことができるためですinitialize。そのようなメソッドをオーバーライドしたい場合は、別のクラスを拡張して独自のクラスを作成する必要があります (Ext.Buttonこの場合)。

ただし、特定の使用法ではelement、リスナーを追加するときにオプションを使用できます。

var search = {
    width: 46,
    margin:'3 5 0 0',
    style:'background:url(resources/images/search_btn.png);border:0;background-repeat:no-repeat;',
    listeners: {
        element: 'element',
        tap: function() {
            topMenu.fireEvent('searchCmd', topMenu);
        }
    }
};
于 2013-01-29T15:29:49.803 に答える