2012-04-10 21 views
4

我有ExtJS3一點經驗,現在開始用4版ExtJS4 - 如何在selectionchange上獲取父網格?

在我的控制,我有這樣的:

init: function() 
{ 
    this.control({ 
     "userlist": 
     { 
      selectionchange: function (view, selected, opts) 
      { 
       //get to grid?? 
      } 
     } 
    }); 
} 

我怎樣才能訪問該事件發生在網格上,而無需使用的ID? 我想啓用/網格工具欄(tbar)如果有選擇的項目上禁用按鍵,但我不希望給任何標識的(不是吧,不是個別的按鈕)

編輯:溶液呈使用refs財產控制器:

refs: 
[ 
    { 
     ref: "list", 
     selector: "userlist" 
    } 
], 


selectionchange: this.activateTbButtons 

activateTbButtons: function (selected, opts) 
{ 
    if (selected.selected.length == 1) 
    { 
     var tb = this.getList().query("toolbar"); 
    } 
} 

回答

1

編輯

我接過一看文檔的selectionChange事件:

selectionchange(Ext.selection.Model this, Ext.data.Model[] selected, Object eOpts) 

視圖沒有被傳遞到selectionchange處理程序。一個簡單的方法來處理,這是要麼使用所看到的文檔爲Ext.app.ControllerExt.getCmp()或使用裁判:

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.app.Controller

+0

我不應該能夠訪問'view.tbar'呢? aahhh ...哎呀,這是一個配置設置,而不是屬性 – Madd0g 2012-04-10 19:31:52

+0

我編輯了迴應。該視圖沒有被傳遞給處理程序。只有選擇模型,選定的項目等 – 2012-04-10 19:39:40

+1

哇,這種'refs'方法是相當不錯的,它可以完美地與它協調 – Madd0g 2012-04-10 19:47:42

10

剛剛發現,你可以使用屬性視圖,視圖Ext.selection.Model下。

這對於打開對象的多個實例的情況很有用。

因此,訪問網格在你的榜樣:

selectionchange: function (view, selected, opts) { 
//get to grid?? 
var grid = view.view.ownerCt; 
} 
+0

真棒!有用。 – 2016-07-12 16:52:53

3

有同樣的問題,找到了以前的答案缺少一些點。總之,我建議:

selectionchange: function (selModel, selected, eOpts) { 
    var grid = selModel.view.ownerCt; 
} 

這已經由Adezj建議雖然提到了具有視圖作爲第一個參數,而並不適用於ExtJS的4.0.7+ SelectionChange事件。 (不要認爲選擇變更曾經有過這種觀點作爲論據嗎?)

請注意,由於選擇模型的視圖屬性在API文檔中沒有提及,所以這可能不會被ExtJS正式支持。

另一種方法是在控制器中使用Ext.ComponentQuery.query(...)或定義ref,如Arun V提出的,它基本上只是Ext.ComponentQuery.query()的一個方便包裝。如果您只有網格類的單個實例,但是您需要注意以防萬一您具有相同網格類的多個實例的,則此工作正常。只需執行Ext.ComponentQuery.query('xtype-of-your-grid')將返回全部您的網格實例,並且您將會發現用戶選擇了某個內容的很多樂趣。

因此,總的來說,我強烈建議您始終根據觸發事件的組件或對象工作,以確保您處於組件層次結構的正確分支中,除非您確定永遠不會有更多而不是您爲其編寫控制器的那個類的一個實例。

+0

你剛剛做完我的星期五! – emolaus 2013-02-22 08:14:46

1

//獲取網格

var grid = selectionModel.view.ownerCt.ownerCt; 
+3

你應該解釋爲什麼這個答案是合適的,它將如何解決原始海報的問題。 – JakeGould 2014-06-13 01:07:30