4.1 ACTUALIZACIÓN:
Como una actualización ... en 4.1 ahora hay un método estático setFields
que se puede utilizar para definir los campos del modelo de prototipo. Funciona bien en el método init de un controlador.
Cuando hice esto, quería tener algunos campos estáticos definidos en la clase de modelo y luego configurarlos de forma más dinámica. Lamentablemente, el nuevo setFields
método reemplaza todos los campos con el argumento, aunque fue bastante fácil de manejar.
este ejemplo se utiliza el patrón MVC, donde mi modelo y la tienda se incluyen en el controlador de model
matriz y store
array (proveerme de los captadores prácticos utilizados a continuación):
Ext.define('ST.controller.Main', {
extend: 'Ext.app.Controller',
models: ['User', 'Reference'],
stores: ['CurrentUser', 'PermissionRef'],
views: ['MainPanel'],
init: function() {
var me = this;
me.getPermissionRefStore().on('load', function(store, records) {
var model = me.getUserModel();
// this returns the static fields already defined
// in my User model class
fields = model.prototype.fields.getRange();
// add the permission options (dynamic fields) to the static fields
Ext.each(records, function(permission) {
fields.push({name: permission.get('name'), type: 'bool'});
});
// 4.1 method to update the User model fields
model.setFields(fields);
// now load the current user (it will use the updated model)
me.getCurrentUserStore().load();
});
}
});
El User
modelo y CurrentUser
tienda son creados exactamente igual que los modelos y tiendas regulares y no dinámicos, e incluidos en sus respectivas matrices de controladores, el modelo 'Usuario' simplemente no tiene los campos dinámicos que se agregan como se muestra arriba.
Gracias por agregar la actualización – Jom
¿Por qué no agrega los nuevos campos directamente a 'fields'' MixedCollection'? ¿Hay algún procesamiento necesario realizado por el método 'setFields'? Quiero decir, además de crear la instancia 'Field', en tu caso. – rixo