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'
     });**
 }          
});

// view/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);
 }     
});

私の問題は、コントローラーがビューにボタンを追加しないことです。次のエラーが表示されます。

キャッチされていない TypeError: オブジェクト関数 h(){return this.constructor.apply(this,arguments)||null} にはメソッド 'add' がありません

私は何を間違っていますか?

事前にご協力いただきありがとうございます

4

1 に答える 1

0

メニューパネルへの参照を追加する必要があります。menupanel に itemId:menupanelを割り当てます。コントローラーでは、それを参照できます: で参照できます#menupanel.menupanel完全に正しいかどうかわからないセレクターとしてあなたが持っていることに気付きました。

また、コントローラーにthis.getMenuPanelView()参照がないため、正しくないことをしていることにも気付きました。menuPanelView

ヒント: また、ブラウザのデバッグ ツール (Google Chrome が私のお気に入り) を使用し、コードにブレーク ポイントを追加して、コードを簡単に評価することもできます。

于 2013-01-21T18:49:00.500 に答える