2012-12-28 32 views
0

我有一个应用程序,一切都很好。但是,我无法捕捉mainTabChanged事件,也不知道为什么。我在例子中做了所有事情,控制台日志FIRED,但从来没有RECEIVED分机JS事件没有解雇

为什么?

Ext.define('MyApp.controller.Tab', { 
    extend:'Ext.app.Controller', 

    init:function() { 
     var me = this; 
     me.mainWindow = me.getView('tab.List').create(); 

     me.control({ 
      'mainTab': { 
       mainTabChanged: me.onMainTabChanged 
      } 
     }); 

    }, 

    me.onMainTabChanged: function(oldTab, newTab, settings) { 
     console.log("received"); 
     console.log(settings); 
    } 
}); 


Ext.define('MyApp.view.tab.List', { 

    extend:'Ext.form.FieldSet', 

    alias:'widget.mainTab', 

    initComponent:function() { 
     var me = this; 

     me.title = 'App' 
     me.items = me.createElements(); 

     me.addEvents(
      'mainTabChanged' 
     ); 

     me.callParent(arguments); 

    }, 


    createElements: function() { 
     var me = this, tabs = []; 

     tabs = [{ 
      title: 'Tab 1', 
       bodyPadding: 10, 
      html : 'A simple tab' 
     }, 
     { 
      title: 'Tab 2', 
       html : 'Another one' 
     }]; 

     var tabPanel = Ext.create('Ext.tab.Panel', { 
      height: 150, 
      activeTab: 0, 
      plain: true, 
      items : tabs, 
      listeners: { 
       beforetabchange: function(panel, newTab, oldTab) { 
        console.log("FIRED"); 
        me.fireEvent('mainTabChanged', oldTab, newTab, 'Test'); 
       } 
      } 
     }); 

     return tabPanel; 
    } 
}); 
+0

这里有一个语法错误:'me.onMainTabChanged:function',将其更改为'onMainTabChanged:function'。不知道这是否是你的问题。如果没有,请准备一个jsfiddle或添加足够的代码,以便它可以用来重现问题。 – Yoshi

+0

这不是错误。我不知道如何将jsfiddle放在一起......这有点复杂,因为ext js是另一个软件栈(shopware)的一部分。不过,我会尝试。 – shredding

回答

1

我认为问题是,你的widget“mainTab”是一个“清单”,但你从“一个tabpanel”触发事件。

在控制器试试这个:

 me.control({ 
     'mainTab > tabpanel': { 
      mainTabChanged: me.onMainTabChanged 
     } 

或只是

 me.control({ 
     'tabpanel': { 
      mainTabChanged: me.onMainTabChanged 
     } 
+0

不,这不是问题(我想,事件泡沫无论如何)。 – shredding

0

我的问题是,我试图注入一个应用程序到另一个。我现在通过不注入应用程序来解决问题,但是通过将控制器和视图直接注入到应用程序中,从而使它们成为应用程序的本地部分,因此它们不会绕过事件总线。