複数選択コンボボックス (タグフィールド) で選択されたアイテムに応じて、フォーム内のフィールドを動的に表示および非表示にしたい。
コンボボックスで選択された各項目には、いくつかの関連する非表示のフォーム フィールド (表示される) があります。
フィールドには「hidden:true」というプロパティがあります。
フィールドを表示することはできますが、コンボボックス フィールドまたはタグ フィールドからアイテムを削除すると非表示にできません。
listeners:{
select:function( combo, records, eOpts) {
var combo = Ext.ComponentQuery.query('#combo')[0];
var field = Ext.ComponentQuery.query('#A')[0];
var field1 =Ext.ComponentQuery.query('#B')[0];
var field2 =Ext.ComponentQuery.query('#C')[0];
var records = combo.getValue();
console.log(records);
for (var i = 0, count = records.length; i < count; i++) {
switch(records[i]) {
case 'itemone':
if(field.isHidden()) {
field.show();
}
else {
field.hide();
}
break;
case 'itemtwo':
if(field1.isHidden()) {
field1.show();
}
else {
field1.hide();
}
break;
case 'itemthree':
if(field2.isHidden()) {
field2.show();
}
else {
field2.hide();
}
break;
}
}
}
}
console.log(records) は次の結果を提供します。
見せる:
["itemone"]
["itemone", "itemtwo" ]
["itemone", "itemtwo", "itemthree"]
隠れる:
["itemone", "itemtwo"]
["itemone"]
コードを修正するための提案をお願いします。
注: 次の投稿が前に間違った場所にあったことをお詫びします
私はあなたの提案を実装しようとしましたが、成功しませんでした (初心者の困難)。
私のコード:
listeners:{
select:function( combo, records, eOpts) {
var combo = Ext.ComponentQuery.query('#combo')[0];
var fields = Ext.ComponentQuery.query('[autoHideTag]');
var records = combo.getValue();
console.log(records);
for (var i = 0, count = records.length; i < count; i++) {
fields.setVisible(records.indexOf(fields.autoHideTag) !== -1 );
switch(records[i]) {
case 'itemone':
if(field.isHidden()) {
field.show();
}
else {
field.hide();
}
break;
case 'itemtwo':
if(field1.isHidden()) {
field1.show();
}
else {
field1.hide();
}
break;
case 'itemthree':
if(field2.isHidden()) {
field2.show();
}
else {
field2.hide();
}
break;
}
}
}
}
Firebug さんのコメント:
TypeError: fields.setVisible は関数ではありません
もっと提案を手伝ってくれませんか。
メルシー。