具有ExtJS4的父级的ComponentQuery?

时间:2012-05-09 09:19:51

标签: extjs4 extjs4.1

有没有办法查询“up”?我在一个Component中,想要使用control()向其父级事件注册监听器。这需要一个Query,它让我成为主视图的父级。

4 个答案:

答案 0 :(得分:4)

在ExtJS4中,您可以使用Ext Element中的'up()'。

params是您希望找到的父元素的字符串,例如:

var parentEl = Ext.get('childID').up('div.parentClass'); 

如果您提供有关组件/元素结构的一些详细信息,我可以给出一个适合的具体示例。

编辑:显示从组件中“向上”

var myComponent = // however you've got it

var theParentEl = myComponent.getEl().up('div.parentClass');

答案 1 :(得分:2)

通常up('PARENTCLASS')足以满足您的目标。以下是我在代码中所做的事情,因此元素为它们所处的表单生成事件:

items: [
...
   { xtype: 'checkbox', listeners: {
      change: function() { this.up('window').fireEvent('checkboxchanged'); }
   }}
...
]

答案 2 :(得分:2)

据我了解,您希望专门侦听组件父级从子组件的控制器控制功能调度的事件。

没有像'parent<这样的查询选择器组件'你可以放在子控制器的控制功能中来监听父事件。

通常我只是将父视图添加到孩子的控制器,然后你可以听它的事件。但我认为你不是这样做的,因为你试图委托给不同的控制器或什么的。

只要父事件发生,您就可以在子组件中触发事件。在父控制器内部,您可以这样做:

var child = parent.down('child');
child.fireEvent('myOwnEventName', arg1, arg2, arg3, etc);

然后,您将在子控制器的控制功能中添加'myOwnEventName'的处理程序,以运行您想要的逻辑。

如果父级没有控制器,那么您只需将父组件添加为子级控制器中的视图。

答案 3 :(得分:1)

Sencha帮助说“候选组件中的成员表达式可能会被测试。如果表达式返回真值,候选组件将包含在查询中:”http://docs.sencha.com/ext-js/4-0/#!/api/Ext.ComponentQuery帮助中。

我花了一些时间意识到我可以在我的控制器中执行以下操作:

this.control({
  'window{down("testcomp")}[down]': { beforedestroy: this.doNotCloseIfUnsaved }
});

使用{}操作,我们可以调用任意代码。 从效率的角度来看真的很糟糕,但它完成了工作。我不得不添加[down]因为它从右到左运行组件查询,所以我们必须确保在我们尝试运行它之前存在down()(在每个组件上)。因此,我能够将事件附加到包含我的组件的任何窗口。

当然,也可以使用其他功能,例如child()而不是down(),如果你想确保它是直接的孩子而不是下面的任何地方。