【问题标题】:Ext js how move date picker handler into controller [closed]Ext js如何将日期选择器处理程序移动到控制器中[关闭]
【发布时间】:2012-11-23 12:04:08
【问题描述】:

我想将我的 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
                    })
                },

【问题讨论】:

    标签: javascript extjs controller extjs4 extjs-mvc


    【解决方案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('...' 上使用更专业的选择器。

    【讨论】:

    • @user1827016 您的评论没有帮助。解释它是如何不工作的。也许考虑编辑您的问题,以提供有关您尝试过的内容(源代码)和结果的更多详细信息。
    【解决方案2】:

    您可以制作菜单处理程序来触发网格的自定义事件。然后通过controll 方法在你的控制器中捕获它。

    this answer 中描述了这种技术。

    更新

    我以前的解决方案有点开销,因为您可以使用选择器组合来捕获菜单的事件而无需触发自定义事件。尝试以下选择器之一:

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

    例如:

    // controller
    // ...
    init: function() {
        this.control({
           '#span3': {
               select: this.onDateSelect
           }
        });
    },
    onDateSelect: function(dp, date) {
        // ...
        debugger;
    }
    

    【讨论】:

    • 你能给我一些例子吗?我如何处理处理程序?我尝试了很多选择器...
    • @user1827016 更新了答案。现在就试试吧。
    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2020-02-28
    • 2022-07-23
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多