showCondition
ビュー構成内のいくつかの項目にカスタム プロパティを指定しました。そのようなすべてのコンポーネントを照会するにはどうすればよいですか?
Ext.ComponentQuery.query()を試しました。問題は、query()
正しい数の要素が返されることですが、「実際の」コンポーネントがないことです。つまり、elements[0].hide() を実行しようとすると、効果がありません。
ref
コントローラークラスで同じ要素を使用すると、hide()
完全に機能 することに気付きました。
その後console.log
、要素を取得する両方の方法の結果を調べて、奇妙なことに気付きました。まず、返される要素には異なる htmlid
属性 (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!!!');
}
});