1

我有以下代码:

// wlpt.js

Ext.onReady(function() {     
 Ext.application({
     name: 'WLPT',  
     appFolder: 'app',

     controllers: ['MenuPanel'/*, 'Employees'*/],

     launch: function() {
         WLPT.application = this;
     },

     autoCreateViewport: true            
 });
});

//viewport.js

Ext.define('WLPT.view.Viewport', {
 extend:'Ext.container.Viewport',
 id:'viewport',
 requires:[
 'WLPT.view.Header',
 'WLPT.view.MenuPanel'
 ],
 layout: 'fit', 

 initComponent: function() {
     this.items = {
         layout: 'border', 
         items: [{
             region: 'north',
             xtype: 'headerview',
             height: 80
         },{
             region: 'west',
             id: 'westernPanel',
             xtype: 'menupanelview',
             width: 200,
             collapsible: true

         },{
             xtype: 'panel',
             title: 'Center Panel',
             region: 'center'
         }]
     };        
     this.callParent();
 }
});

// 控制器/MenuPanel.js

Ext.define('WLPT.controller.MenuPanel', {
 extend: 'Ext.app.Controller',

 currentYear: 0,    
 views:['MenuPanel'],

 refs:
 [{
     selector: '.menupanel',
     ref: 'menuPanel'        
 },{ 
     selector: '#centerPanel',
     ref: 'centerPanel'
 }],

 init: function() {
     var d = new Date();
     this.currentYear = d.getFullYear();

     this.control({            
         '#btnEmployee': {
             click: this.btnEmployeeClicked
         }
     });
     this.callParent(arguments);

     rolevalue = 10;

     if (rolevalue == 10) {
         // user is member of administration group
         this.addAdminButtons();
     } 
 },
 addAdminButtons:function() {
     console.log('addAdminButtons');
     **this.getMenuPanelView().add({
         xtype:'button',
         scale: 'large',
         text: 'Projects',
         itemId: 'btnProject'
     });**
 }          
});

// 查看/MenuPanel.js

Ext.define('WLPT.view.MenuPanel', {
 extend: 'Ext.panel.Panel',
 alias: 'widget.menupanelview',
 bodyPadding: 2,
 title: 'Menu Panel',
 layout: {
     type:'vbox',
     align:'stretch'
 },
 items: [{
     xtype:'label',
     height: 10
 }],

 autoShow: true,

 initComponent: function() {
     this.callParent(arguments);
 }     
});

我的问题是控制器没有在视图上添加按钮。我收到以下错误:

未捕获的类型错误:对象函数 h(){return this.constructor.apply(this,arguments)||null} 没有方法“添加”

我究竟做错了什么?

提前感谢您的帮助

4

1 回答 1

0

您需要添加对菜单面板的引用。为你的菜单面板分配一个 itemId:menupanel并且在你的控制器中你可以引用它可以引用它: #menupanel。我注意到你有.menupanel选择器,我不确定它是否完全正确。

我还注意到您的this.getMenuPanelView()操作不正确,因为您在控制器中没有引用menuPanelView

提示: 您也可以使用浏览器的调试工具(我最喜欢 Google Chrome)并在代码中添加断点以轻松评估您的代码。

于 2013-01-21T18:49:00.500 回答