2011-08-26 60 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