Controller未捕获的事件

时间:2012-10-04 23:09:49

标签: sencha-touch-2

我正在尝试响应控制器内的视图触发事件。事件会触发,但永远不会调用控制器操作。

查看

Ext.define("MyApp.view.Dashboard", {
    extend: 'Ext.Container',
    xtype: 'my_dashboard',
    config: {
        items: [
            {
                xtype: 'dataview',
                listeners: {
                    itemtap: function(sender, index, elem, record) {
                        // fires with param, e.g. 'inbox'
                        this.fireEvent(record.get('name'));
                    }
                }
            }
            ...

控制器

Ext.define('MyApp.controller.Dashboard', {
    extend: 'Ext.app.Controller',
    config: {
        control: {
            'my_dashboard': {
                'inbox': 'showInbox',
                ...
            }
        }
    },

    showInbox: function () {
        /* never gets called */
    },

    ...

我做错了什么?

更新

我找到了一个解决方案,但感觉非常黑客。我在数据视图 bubbleEvents视图中添加了my_dashboard配置,并且事件开始向控制器发送。

由于仪表板可以有可变数量的项目,我不知道我需要冒泡哪些事件。当然,我可能会冒出所有可能的仪表板事件,但这看起来像是一块巨大的垃圾。

视图是否应该触发应用程序事件,例如MyApp.app.fireEvent()

2 个答案:

答案 0 :(得分:0)

我会在数据视图上添加itemId

itemId: 'my_dashboard_dataview'

然后在你的控制器......

control: {
            '#my_dashboard_dataview': {
                'itemtap': 'showInbox',
                ...
            }
        }

答案 1 :(得分:0)

<强>更新

以下是一些可以帮助您入门的代码:

控制器:

Ext.define('MyApp.controller.Dashboard', {
    extend: 'Ext.app.Controller',
    config: {
        control: {
            'my_dashboard': {
                painted: 'onDashboardPainted',
                inbox: 'showInbox'
            }
        }
    },

    onDashboardPainted: function(dashboard, eOpts) {
        dashboard.down('dataview').on('itemtap', function(sender, index, elem, record){ 
          dashboard.fireEvent(record.get('name'));
          //check the console to make sure you the value is: inbox
          console.log(record.get('name'));
        });
    },

    showInbox: function () {
        console.log('showInbox init');
    },

这肯定是一个范围问题......在你的控制器中为my_dashboard添加一个绘制的函数......第一个函数变量将是my_dashboard组件本身:

painted: function(dashboard,...

现在在绘制的函数中动态添加侦听器:

dashboard.down('dataview').on( ......其余的听众代码......

现在在听众内部做dashboard.fireEvent(....);

很抱歉我手机上的格式化,如果你无法上班,我明天会发布代码