有没有办法查询“up”?我在一个Component中,想要使用control()向其父级事件注册监听器。这需要一个Query,它让我成为主视图的父级。
答案 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(),如果你想确保它是直接的孩子而不是下面的任何地方。