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, время: 12:02. |