2012-02-29 35 views
3

我在我的應用程序中需要根據我從服務器端獲得的值顯示UI組件(如文本框,組合框)。確切地說,我在頁面上有一個組合框,當用戶更改我需要將選定值發送到服務器以獲取需要顯示的信息的值時。如果不使用MVC我實現它如下Extjs MVC - 在控制器中設置商店事件

  1. 當用戶在組合框中改變值,我刷新(使用負載方法)另一個存儲
  2. 當我從服務器取回數據(「datachanged」事件)我讀出的數據,並創建UI組件

現在我試圖使用ExtJS的MVC,所以我有兩個問題

  1. 如何訪問其關聯到一個控制器,但不是店NE cessarily從視圖中的任何UI組件
  2. 我怎樣才能建立一個商店的控制器的事件(控制功能),就像從視圖中我們設置事件

代碼,我想從商店設置事件在控制器像「datachanged」像下面 -

this.control({ 
    'viewport > #content-panel' : { 
     render : this.createMainTabs 
    } 
}); 

回答

1

要獲取存儲對象在控制器中只使用this.getStore('StoreName'),每家店在默認情況下都有其自己的實例,它並沒有真正的問題無論是綁定到任何UI組件你有。

獲得商店對象後,您可以使用任何您喜歡的方法訂閱任何商店事件。我通常喜歡

store.on('load', {...}) 

此外,我不會在視圖代碼中更改任何UI。我會把所有這些自定義放入控制器代碼中。

2

除了沙的回覆,我可以說你可以在你的控制器中設置你的商店事件處理程序。例如你有一個店一個組合框,所以你可以這樣寫:

this.control({ 
    '#myCombo' : { 
     afterrender : this.setupStoreListeners 
    } 
}); 

.... 

setupStoreListeners: function(combo){ 
    var store = combo.store; 
    store.on('datachanged', //.....); 
} 

還有一件事,因爲SHA寫你總是可以通過名字得到商店,但我用這個只有當我需要分享多個控制器之間的商店實例。如果我只需要在一個控制器中使用此存儲器,我只需將其保存在此控制器中:

setupController: function(){ 
    this.myStore = this.getCombo().store; // now you could use this.myStore anywhere you need 

} 
+0

我一直在尋找這件事情。謝謝@innerJL – sErVerdevIL 2012-11-15 08:43:54