2011-08-26 63 views
5

我想在控制器中定義一個ref以在選擇更改時啓用/禁用刪除buitton。但我不明白,所以getDelButton() - 方法提供了未定義的。請幫助...ExtJs 4參考網格中的工具欄按鈕

控制器:

refs:[ 
     { ref: 'tabPanel', selector: 'viewport > tabPanel' }, 
     { ref: 'grid', selector: 'tabPanel > usermanagementgrid' }, 
     { ref: 'delButton', selector: 'grid > button #delete'} 
], 

...

this.getDelButton().setDisabled(false); 

視圖定義:

dockedItems: [{ 
     xtype: 'toolbar', 
     items : [ { 
      xtype: 'button', 
      id: 'delete', 
      iconCls: 'drop-add', 
      text: 'Add', 
      tooltip: 'Press to add a new user.', 
      action: 'addUser', 
      scope: this, 
     }, 

在此先感謝...

+1

請接受答案,或者如果您沒有得到您需要的內容,請添加評論。 – LittleTreeX

回答

0

我有一個類似的問題,原來是g rid選擇器,通常你選擇器使用xtype,網格有網格或網格面板。嘗試使用selector: 'gridpanel >button #delete'

7

您可能遇到3個問題與你的選擇:

  1. 你不應該有分量和ID選擇器之間的空間。使用:button#delete
  2. 正如nscrob提到,您可能需要使用gridpanel而不是grid
  3. button不是grid的直接子女。在這種情況下,最有可能是toolbar的直接子女。這意味着你必須做更多的事情:gridpanel > toolbar > button#deletegridpanel button#delete

參照上述#3,>選擇器表示父母的直接子女。這意味着字面意義上是父母的孩子,而不僅僅是嵌套鏈下的某個組件。如果你只是想在你的gridpanel拉一個按鈕,然後使用gridpanel button。這將搜索所有gridpanel的孩子,並在所有這些孩子中搜索匹配button的任何內容。但請注意,以這種方式使用它將返回gridpanel內的所有按鈕(除非您指定了id)。

最後,在螢火蟲中使用您的控制檯將幫助你更直接。打開螢火蟲,並在控制檯中可以運行命令。因此,加載網格並運行以下命令: Ext.ComponentQuery.query('gridpanel > toolbar > button#delete')並查看返回的內容。這樣您就不必從代碼中來回移動,並刷新瀏覽器窗口。請記住,query()返回一個數組。

+0

+1爲完整答案。但我認爲#2不是一個原因。否則,sencha將在_Using refs_部分中的[docs](http://docs.sencha.com/ext-js/4-0/#!/api/Ext.app.Controller)中包含無效示例。 –

+0

我不是任何ExtJS專家。但是,當我嘗試在Ext.ComponentQuery.query()中使用選擇器時,除非使用gridpanel vs grid,否則它將不起作用。我很好奇爲什麼,如果我知道,我會在這裏發佈。感謝+1! – LittleTreeX