2012-06-07 5 views
7

Я использую Extjs4 и MVC. Я хотел бы изменить динамические поля моей модели ... Что-то вроде добавления переменного количества полей ... Любые предложения?Extjs4 Как динамически менять модель?

+1

возможно дубликат [Динамическая модель с ExtJS 4] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) –

+0

Что именно вы пытаетесь делать? Можете ли вы быть более конкретным? А также какую версию ExtJ вы используете? – sha

+1

Extjs4, например, у меня есть модель с 3-мя полями ... Я хочу расширить ее с помощью других шести полей ... –

ответ

12

Вы можете использовать функцию model.setFields(fieldsArray), показанную here в API. Этот метод заменяет все существующие поля в модели любыми новыми полями, которые вы включаете в аргумент. Существует не статический метод getFields для захвата существующих полей, чтобы не перезаписывать их, но их достаточно просто получить, используя model.prototype.fields.

Я сделал это недавно, чтобы привязать поля настройки динамического разрешения к модели «Пользователь» до того, как я загрузил пользователя. Вот пример:

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

Я только заметил, что это дубликат [этого] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) после того, как я ответил на него. Я дал тот же ответ там ... – Geronimo