2012-06-07 27 views
7

Uso Extjs4 y MVC. Me gustaría cambiar los campos de mi Modelo dinámicamente ... Algo así como agregar un número variable de campos ... ¿Alguna sugerencia?Extjs4 ¿Cómo cambiar un modelo dinámicamente?

+1

posible duplicado de [Modelo Dinámico con ExtJS 4] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) –

+0

¿Qué es exactamente estás tratando de ¿hacer? puedes ser un poco mas especifico? ¿Y también qué versión de ExtJs estás usando? – sha

+1

Extjs4, por ejemplo, tengo un modelo con 3 campos ... Quiero extenderlo con otros seis campos ... –

Respuesta

12

Puede usar la función model.setFields(fieldsArray), que se muestra here en la API. Este método reemplaza todos los campos existentes en el modelo con cualquier campo nuevo que incluya en el argumento. No hay un método estático getFields para capturar los campos existentes para no sobrescribirlos, pero es fácil obtenerlos usando model.prototype.fields.

Lo hice recientemente para adjuntar campos de configuración de permisos dinámicos a un modelo de "Usuario" antes de cargar al usuario. He aquí un ejemplo:

Ext.define('myApp.controller.Main', { 
    extend: 'Ext.app.Controller', 

    models: [ 
     'User', 
    ], 

    stores: [ 
     'CurrentUser', // <-- this is not autoLoad: true 
     'PermissionRef', // <-- this is autoLoad: true 
    ], 

    views: ['MainPanel'], 

    init: function() { 
     var me = this; 

     // when the PermissionRef store loads 
     // use the data to update the user model 
     me.getPermissionRefStore().on('load', function(store, records) { 
      var userModel = me.getUserModel(), 
       fields = userModel.prototype.fields.getRange(); 
       // ^^^ this prototype function gets the original fields 
       // defined in myApp.model.User 

      // add the new permission fields to the fields array 
      Ext.each(records, function(permission) { 
       fields.push({ 
        name: permission.get('name'), 
        type: 'bool' 
       }); 
      }); 

      // update the user model with ALL the fields 
      userModel.setFields(fields); 

      // NOW load the current user with the permission data 
      // (defined in a Java session attribute for me) 
      me.getCurrentUserStore().load(); 

     }); 

    } 
}); 
+0

Acabo de notar que este es un duplicado de [este] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) después de haberlo respondido. Di la misma respuesta exacta allí ... – Geronimo

Cuestiones relacionadas