Erro ao adicionar o componente MixedCollection ao formulário extjs
-
12-12-2019 - |
Pergunta
Estou tentando construir dinamicamente um formulário extjs e quando tento adicionar o objeto MixedCollection construído dinamicamente ao formulário, recebo um Erro de tipo:e.mixins.elementCt é indefinido erro.
<div id="form-@pageSpecificVar" class="grid-container even"></div>
<script>
Ext.define('HeaderForm', {
extend: 'Ext.form.Panel',
initComponent: function () {
var me = this;
Ext.applyIf(me, {
id: Ext.id(),
defaultType: 'textfield',
items: [{
xtype: 'container',
items: [{
xtype: 'textfield',
fieldLabel: 'Test'
}]
}]
});
me.callParent(arguments);
}
});
// Define our data model
Ext.define('HeaderModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'FieldA', type: 'int' }
]
});
var store = Ext.create('Ext.data.Store', {
model: 'HeaderModel',
proxy: {
type: 'ajax',
actionMethods: { create: 'POST', read: 'GET', update: 'POST', destroy: 'POST' },
url: '@Url.Content("~/Test/Header")',
timeout: 1200000,
listeners: {
load: function () {
}
}
}
});
store.load({
scope: this,
callback: function (records, operation, success) {
var form = new HeaderForm();
var formItems = new Ext.util.MixedCollection();
Ext.each(records[0].fields.items, function (item) {
console.log(item);
formItems.add(new Ext.form.DisplayField({
fieldLabel: 'Test'
}));
}, this);
console.log(formItems);
form.add(formItems);
form.loadRecord(records[0].data);
form.render('form-@pageSpecificVar');
}
});
</script>
Outra coisa que não entendo é que quando coloco a função dentro do load listener nada acontece.Então tive que recorrer ao evento de retorno de chamada.
Atualizar: O método form.add usa um componente ou matriz de componentes, portanto, em vez de adicionar o tipo MixedCollection, refiro-me a formItems.items para adicionar a matriz de componentes displayfields.
Mas, por algum motivo, o carregamento dos ouvintes da loja não está sendo acionado quando store.load é executado. Alguém vê algum problema nisso?Esqueça isso...Eu descobri...Coloquei o ouvinte em vez do proxy em vez da loja.
2º trimestre
Também algo estranho é que durante o método de retorno de chamada store.load, os registros não retornam com os valores carregados.Esqueça isso...Eu descobri...Foi o objeto json que estou passando.Esqueci de retirá-lo da estrutura de erro/dados do formulário.
Obrigado
Solução
MixedCollection não é um parâmetro aceito para add, você precisa usar um array.Esta informação está nos documentos.