Ext4.2 Как в конструкторе объединить конфигурацию при наследовании
Имеем Extjs 4.2
Как мне объединить дефолтную конфигурацию в описании класса и передаваемую конфигурацию при создании объекта? Проблема в свойствах класса, которые содержат подобъекты со своими конфигурациями. Пример кода ниже. Основная проблема с "proxy". Как правильно объединять конфигурации?
Ext.define('Adm.EmptyModel', {
extend: 'Ext.data.Model',
});
Ext.define('Adm.AclMain', {
extend: 'Ext.data.Store',
model: 'Adm.EmptyModel',
title: 'AclMain',
autoSync: true,
autoLoad: false,
//autoLoad: true,
proxy: {
//api: {},
type: 'ajax',
reader: {
type: 'json',
root: 'data',
idProperty: 'ID',
messageProperty: 'message',
successProperty: 'success'},
writer: {
type: 'json',
root: 'data',
encode: true
}
},
constructor: function (config) {
var me = this;
//me.callParent(); -- только предустановленные при описании класса поля
//Ext.apply(me, config); -- перезаписывает свойство proxy, но мне надо объединить конфигурации
//Ext.applyIf(me, config); -- не объединяет конфигурации свойства proxy, оставляется только предустановленное
//me.callParent(arguments);-- перезаписывает свойство proxy, но мне надо объединить конфигурации
}});
var store_users = Ext.create('Adm.AclMain', {
storeId: 'store_users',
title: 'Users',
fields: ['ID', 'NAME', 'FULL_NAME', 'EMAIL', 'PHONE'],
proxy: {
api: {
read: 'd_users.php',
update: 'd_users_edit.php?action=update',
create: 'd_users_edit.php?action=create',
destroy: 'd_users_edit.php?action=delete'
}
}
});
|
constructor: function (config) {
config = config || {};
Ext.merge(this.proxy, config.proxy);
delete config.proxy;
this.callParent(arguments);
}
|
ну или если не проканает:
constructor: function (config) {
config = config || {};
config.proxy = Ext.merge({}, this.proxy, config.proxy);
this.callParent(arguments);
}
|
спасибо.
я так и предполагал, что придется каждое свойство отдельно обрабатывать. А нет ли возможности получить текущую конфигурацию объекта this ? А потом сделать merge. |
вы имеете в виду весь конфиг инстанса смержить с прототипом класса?
если да, то конечно технически можно и так сделать
constructor: function (config) {
Ext.merge(this, config);
// reset config object ..since we've just applied it manually
config = {};
this.callParent(arguments);
}
..но лично я бы не стал. Не изучал код Ext.merge так-что не уверен что он обрабатывает например цикличные ссылки, а extjs их местами делает. Да и для всех конфигов такое просто не нужно. |
| Часовой пояс GMT +3, время: 15:19. |