2015-10-04 37 views
1

視圖控制器將處於活動狀態,但它將控制許多其他視圖的一個子視圖,因此我認爲會有其他活動視圖控制器。從實時創建的窗體訪問ViewController中的函數

通過即時基本上,窗體是由一個完全不同的調度程序,與組件和處理程序等創建的視圖控制器和窗體之間沒有直接連接。

視圖控制器有多種功能我需要從得到的結果:

canContinue: function (arg1) {var result = true; /*...*/ return result;} 
getStatus: function (arg1, arg2) {var result = 0; /* ... */ return result;} 

/*...*/意味着代碼刪去。所以我想訪問視圖控制器和這些函數。沿着這些路線的東西:

var controller = /* how to get it? */; 

if (!controller.canContinue(p)) 
    alert(controller.status(q, r)); 

我讀它,不建議直接以這種方式訪問​​功能,因此試圖觸發事件,但我似乎無法得到結果回來,這是我需要的。

我想我可以給視圖控制器一個itemId,並做Ext.ComponentQuery.query('#itemId'),但它似乎並沒有工作。我想一個視圖控制器不是一個組件,是有道理的。

視圖控制器具有唯一的類和別名,並且一次只能激活其中一個視圖控制器(如果有幫助的話)。

我可能錯過了一些非常簡單的事情。任何援助將受到歡迎。

回答

2

我不太清楚你的問題。這是我的理解:你有不同的觀點,他們之間沒有直接的聯繫。但是你想要訪問其他視圖的控制器。如果是這樣,請檢查這個小提琴:https://fiddle.sencha.com/#fiddle/urg

否則,我寧願你準備一個小提琴,它顯示你的問題。

Ext.define('FirstPanel', { 
      extend: 'Ext.panel.Panel', 
      controller: 'FirstPanelController', 
      layout: 'fit', 
      itemId: 'firstPanel', 
      items: [{ 
       xtype: 'button', 
       text: 'FirstPanel Button', 
       handler: 'FirstButtonClick' 
      }] 
     }); 
     Ext.define('FirstPanelController', { 
      extend: 'Ext.app.ViewController', 
      alias: 'controller.FirstPanelController', 
      FirstButtonClick: function(button) { 
       var me = this; 
       var SecondPanelController = me.getView().mainView.down('#secondPanel').getController(); 
       SecondPanelController.FirstButtonClick(); 
       console.log('FirstButton Click'); 

      }, 
      SecondButtonClick: function() { 
       alert('You are in FirstPanelController'); 
      }, 
      init: function() { 
       var me = this;  
      } 
     }); 

     Ext.define('SecondPanelController', { 
      extend: 'Ext.app.ViewController', 
      alias: 'controller.SecondPanelController', 
      SecondButtonClick: function(button) { 
       var me = this; 
       var FirstPanelController = me.getView().up().down('#firstPanel').getController(); 
       FirstPanelController.SecondButtonClick(); 
       console.log('SecondPanelController'); 

      }, 
      FirstButtonClick: function() { 
       alert('You are in SecondPanelController'); 
      }, 
      init: function() { 
       var me = this;  
      } 
     }); 

     Ext.define('SecondPanel', { 
      extend: 'Ext.panel.Panel', 
      controller: 'SecondPanelController', 
      layout: 'fit', 
      itemId: 'secondPanel', 
      items: [{ 
       xtype: 'button', 
       text: 'SecondPanel Button', 
       handler: 'SecondButtonClick' 
      }] 
     }); 


     Ext.define('MainPanel', { 
      extend: 'Ext.panel.Panel', 
      initComponent: function() { 
       var me = this; 
       me.items = [ 
        Ext.create('FirstPanel', { 
         mainView: me 
        }), 
        Ext.create('SecondPanel') 
       ] 
       me.callParent(); 
      } 
     }); 
+0

謝謝。所以看起來基本策略是使用視圖的'itemId',然後從中獲取控制器, – Buddy

相關問題