Когда в Ext.form.Panel содержится еще одна Ext.form.Panel, проверка внутренней панели выравнивается до внешней панели.ExtJS (4.2.2) поведение проверки вложенной формы
У меня есть вложенная модель с отношениями hasMany. Панель внутренней формы используется для добавления записей дочерней модели в родительскую запись. Панель внутренней формы имеет свою собственную логику проверки и кнопку сохранения, которая добавляет содержимое родительскому элементу.
Но внешняя панель формы теперь недействительна внутренней панелью формы, которая не является тем, что я хочу. Панель внутренней формы может (и должна) быть очень чистой (и недействительной), когда я хочу сохранить всю запись (включая отношения hasMany).
Как предотвратить проверку внутренней панели формы на внешнюю панель формы?
Это похоже на логическую задачу, рассматривающую поддержку ExtJs для вложенных моделей, но, похоже, нигде не поддерживается. Я не хочу вытаскивать какое-то окно либо при добавлении детей. Он должен быть хорошо интегрирован с исходной формой
Спасибо за любую помощь.
РЕШЕНИЕ
Использование field.up('form')
может повлиять на производительность немного, так что берегитесь.
Ext.define('Custom.form.Basic', {
extend: 'Ext.form.Basic',
onFieldAdd: function (field) {
if (field.up('form') == this.owner)
this.callParent(arguments);
},
onFieldRemove: function (field) {
if (field.up('form') == this.owner)
this.callParent(arguments);
},
getFields: function() {
var owner = this.owner;
return this.monitor.getItems().filterBy(function (f) {
return f.up('form') == owner;
});
}
});
Ext.define('Custom.form.Panel', {
extend: 'Ext.form.Panel',
requires: [
'Custom.form.Basic'
],
createForm: function() {
var cfg = {},
props = this.basicFormConfigs,
len = props.length,
i = 0,
prop;
for (; i < len; ++i) {
prop = props[i];
cfg[prop] = this[prop];
}
return new Custom.form.Basic(this, cfg);
}
});
Спасибо, это было главным образом решением. Мне также пришлось переопределить getFields в Ext.form.Basic, чтобы не включать элементы дочерней формы. –