我已为view config中的某些项指定了showCondition
自定义属性。我如何查询所有这些组件?
我试过Ext.ComponentQuery.query()。问题是,query()
向我返回正确数量的元素,但是没有'真实'组件,也就是说,当我尝试执行元素[0] .hide()时,没有任何效果。< / p>
我注意到,当我在控制器类中使用ref
获得相同的元素时,hide()
完美地运行。
之后,我console.log
- 获得元素的两种方式的结果并注意到奇怪的事情。首先,返回的元素具有不同的html id
属性(textfield-1115
和textfield-1089
)。其次,query()
方法返回的元素已经具有hidden = true属性(这就是hide()无效的原因)。这两个元素都是textfield
个组件。
以下是相关的代码部分。重要的是onAfterRenderForm()
。
在视图中:
Ext.define('MyApp.view.Test', {
extend: 'Ext.container.Container',
alias: 'widget.test',
layout: 'fit',
initComponent: function() {
Ext.apply(this, {
items: [
{
title: 'form',
itemId: 'myForm',
xtype: 'form',
items: [
{
xtype: 'textfield',
fieldLabel: 'code',
showCondition: 'is-root',
allowBlank: false,
vtype: 'alphanum'
}
]
}
]
});
this.callParent(arguments);
}
});
在控制器中:
Ext.define('MyApp.controller.Test', {
extend: 'Ext.app.Controller',
requires: [
'MyApp.view.Test'
],
refs: [
{
ref: 'codeField', selector: '[showCondition]'
}
],
init: function() {
this.control(
{
'#myForm': {
afterrender: this.onAfterRenderForm
}
);
},
onAfterRenderForm: function(oForm) {
var elements = oForm.query('[showCondition]');
console.log(elements[0]);
console.log(this.getCodeField());
if(elements[0].id == this.getCodeField().id)
alert('Elements are not the same!!!');
}
});
答案 0 :(得分:2)
此:
refs: [{
ref: 'codeField', selector: '[showCondition']
}]
与oForm.query('[showCondition]')[0]
略有不同。
对于ref
,您抓住了使用已定义的showCondition值找到的第一个组件。在oForm.query
中,您正在抓取第一个找到的组件,该组件是oForm 的子项,它具有已定义的showCondition值。
这意味着如果您的应用程序中的任何视图中有其他字段已定义showCondition,则对生成的getter getter的调用可能会返回这些字段中的任何一个。这取决于Ext决定将它们放入的顺序。
听起来好像发生了一些事情