ExtJS4.0 -> 4.1 になって、BasicForm.getValuesメソッドから入れ子Form内のフィールドが取得されるように変わった。
明細データ入力用テンプレやら、複合カスタムコントロールやらを作ったとき、中身のフィールドが全部取れてしまう。困った。
ソースを読むと、Ext.ComponentQueryで取ってきている。
ExtJS4.1.1 - src/form/Basic.js:350行目
getFields: function() {
var fields = this._fields;
if (!fields) {
fields = this._fields = new Ext.util.MixedCollection();
fields.addAll(this.owner.query('[isFormField]'));
}
return fields;
},
このExt.ComponentQuery、「XXを除外する」みたいな記述方法が分からない。うむむ。
しゃあなし、別途取得した除外フィールドを対象から外すようにする。
fields = new Ext.util.MixedCollection();
fields.addAll(this.owner.query('[isFormField]'));
excFields = new Ext.util.MixedCollection();
excFields.addAll(this.owner.query('form [isFormField]'));
for(i in excFields.items){
fields.remove(excFields.items[i]);
}
うーん、かっこ悪い。
ComponentQueryをもうちょっと勉強しよう。