0

DatePicker ハンドラー イベントをコントローラーに移動します。しかし、そこでハンドラーイベントをキャッチする方法がわかりません。

Ext.define('MyApp.view.MyGridPanel', {  
...........
    dockedItems:[
        {
            xtype:'toolbar',
            items:[
                {
                    id:'span3',
                    enableToggle:true,
                    text:'start date',
                    toggleGroup:'span',
                    scope:this,
                    menu:Ext.create('Ext.menu.DatePicker', {
                        handler:function (dp, date) {
                            grid=Ext.getCmp('MyGridPanelId');
                            var D = Ext.Date;
                            grid.startDate = date;

                            grid.setTimeSpan(D.add(date, D.HOUR, 8), D.add(grid.endDate, D.HOUR, 18));
                            debugger;
                        },
                        scope:this
                    })
                },
4

2 に答える 2

1

コントローラーを作成し、イベントをリッスンしますselect。簡単な例:

Ext.define('MyApp.controller.MyGridPanel', {
extends: 'Ext.app.Controller',
init: function() {
    this.control( 'toolbar > menu > datemenu', this.onDateSelect );
},
onDateSelect: function(dp, date) {
    grid=Ext.getCmp('MyGridPanelId');
    var D = Ext.Date;
    grid.startDate = date;
    grid.setTimeSpan(D.add(date, D.HOUR, 8), D.add(grid.endDate, D.HOUR, 18));
    debugger;
}

...........

これによりすべてのイベントがキャッチされることに注意してくださいDateMenu select。おそらく、でより特殊なセレクターを使用することをお勧めしますthis.control('...'

于 2012-11-23T12:34:44.937 に答える
0

メニュー ハンドラを作成して、グリッドのカスタム イベントを発生させることができます。そして、controllメソッドを介してコントローラーでキャッチします。

この手法は、この回答で説明されています。

アップデート

私の以前の解決策は、カスタム イベントを発生させずにメニューのイベントをキャッチするために使用できるセレクターの組み合わせがあるため、少しオーバーヘッドがかかります。次のセレクターのいずれかを試してください。

'gridpanel datemenu'
'#MyGridPanelId datemenu'
'gridpanel #span3'
'#span3'

例えば:

// controller
// ...
init: function() {
    this.control({
       '#span3': {
           select: this.onDateSelect
       }
    });
},
onDateSelect: function(dp, date) {
    // ...
    debugger;
}
于 2012-11-23T12:32:22.110 に答える