4.1 ОБНОВЛЕНИЕ:
В качестве обновления ... в 4.1 появился статический метод setFields
, который можно использовать для определения полей прототипа модели. Это хорошо работает в методе init контроллера.
Когда я сделал это, я хотел, чтобы некоторые статические поля были определены в классе модели, а затем установить некоторые более динамически. К сожалению, новый setFields
метод заменяет все поля аргументом, хотя обрабатывать его было достаточно просто.
В этом примере используется шаблон MVC, в котором моя модель и хранилище включены в массив model
контроллера и массив store
(предоставив мне удобные методы получения, используемые ниже):
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();
});
}
});
Модель User
и хранилище CurrentUser
создаются точно так же, как обычные, не динамические модели, и хранилища будут и включены в соответствующие массивы контроллеров, в модели «Пользователь» просто отсутствуют динамические поля, которые добавляются как показано выше.