ExtJS - 如何创建可重用的函数以避免代码冗余?

时间:2014-11-28 11:44:31

标签: javascript extjs

我没有重写大量代码,而是试图将全局功能纳入我的工作中,但我却无法使其工作。

解释: -

以下代码解释了这一点,当用户点击菜单项时,需要在tabpanel xtype组件内创建一个新标签。每次我创建新菜单时只需复制点击功能定义一个更多时间(显然在Ext.create函数中使用它各自的视图名称)。

程序代码: -

     menu:[
            {
                text:'Menu1',
                listeners:{
                    click: function(c){
                        var nodeText = c.text,
                        tabs = Ext.getCmp('app-tab'),
                        tabBar = tabs.getTabBar(),
                        tabIndex;
                        for(var i = 0; i < tabBar.items.length; i++) {
                            if (tabBar.items.get(i).getText() === nodeText) {
                            tabIndex = i;
                            }
                        }    
                        if (Ext.isEmpty(tabIndex)) {                        
                        tabs.add(Ext.create('DemoApp.view.view1',{title:c.text,overflowY: 'scroll',closable:true}));
                        tabIndex = tabBar.items.length - 1;
                       }
                        tabs.setActiveTab(tabIndex);
                    }
                }
            },{
                text:'Menu2',
                listeners:{
                    click: function(c){
                        var nodeText = c.text,
                        tabs = Ext.getCmp('app-tab'),
                        tabBar = tabs.getTabBar(),
                        tabIndex;
                        for(var i = 0; i < tabBar.items.length; i++) {
                            if (tabBar.items.get(i).getText() === nodeText) {
                            tabIndex = i;
                            }
                        }    
                        if (Ext.isEmpty(tabIndex)) {                        
                        tabs.add(Ext.create('DemoApp.view.view2',{title:c.text,overflowY: 'scroll',closable:true}));
                        tabIndex = tabBar.items.length - 1 ;
                       }
                        tabs.setActiveTab(tabIndex);
                    }
                }                    
            }]

我只是想在点击事件发生时调用类似下面的内容:

 click : createTab("DemoApp.view.view1")
 click : createTab("DemoApp.view.view2")
  //Global function
  view.createTab(function(view){
   // Code
  });

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当你做

时你正在调用该函数
click: createTab();

我想你想要它分配一个功能点击:

click: function(){
  createTab("DemoApp.view.view1");
}