ExtjeS Controller触发超链接点击

Ole*_*Ole 6 controller extjs extjs4

我一直试图让它工作很长一段时间,但我仍然无法找到解决方案,除了在视图中的监听器中添加一个afterrender.但我希望控制器能够处理它.

有没有人知道如何解决这个问题?

这就是我目前在我的文件中所拥有的内容 http://pastie.org/2751446

controller/App.js

    Ext.define('HD.controller.App', {
     extend: 'Ext.app.Controller'
     ,views: [
         'core.Header',
         'core.Navigation',
         'core.Content'
     ]
     ,init: function() {
         this.control({
             'navigation a[id=tab1]': {
                 click: this.newTab
             }
         })
     }
     ,newTab: function() {
         console.log('Tab 1 should be loaded now');
     }
});
Run Code Online (Sandbox Code Playgroud)

视图/型芯/ Navigation.js

Ext.define('HD.view.core.Navigation', {
     extend: 'Ext.panel.Panel'
    ,name: 'navigation'
    ,alias: 'widget.navigation'
    ,layout: 'accordion'
    ,region: 'west'
    ,width: 200

    ,title: 'Navigation'
    ,collapsible: true

    ,items: [
        {
            title: 'Title 1'
            ,html: '<a id="tab1" style="cursor:pointer;">Tab 1</a>'
        },
        {
            title: 'Title 2'
            ,html: 'Second'
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

s_h*_*itt 7

您尝试引用超链接的a方式不起作用.

this.control({
   'navigation a[id=tab1]': {
      click: this.newTab
   }
})
Run Code Online (Sandbox Code Playgroud)

这只会查找ExtJS组件,而不是DOM元素.您很可能必须在afterrender或类似的地方附加点击.这并不意味着你不能离开在控制器中完成所有工作的方法.

编辑:

var controller = this;
controller.control({
   'navigation': {
      afterrender: function() {
           Ext.get('tab1').on('click', function() {
                controller.newTab();
           });
      }
   }
})
Run Code Online (Sandbox Code Playgroud)