Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2017, 11:59
Новичок на форуме
Отправить личное сообщение для small75 Посмотреть профиль Найти все сообщения от small75
 
Регистрация: 07.12.2017
Сообщений: 2

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'
        }
    }
});
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2017, 18:29
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

constructor: function (config) {
    config = config || {};
    Ext.merge(this.proxy, config.proxy);
    delete config.proxy;
    this.callParent(arguments);
}
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2017, 18:32
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

ну или если не проканает:
constructor: function (config) {
    config = config || {};
    config.proxy = Ext.merge({}, this.proxy, config.proxy);
    this.callParent(arguments);
}
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2017, 09:56
Новичок на форуме
Отправить личное сообщение для small75 Посмотреть профиль Найти все сообщения от small75
 
Регистрация: 07.12.2017
Сообщений: 2

спасибо.
я так и предполагал, что придется каждое свойство отдельно обрабатывать.

А нет ли возможности получить текущую конфигурацию объекта this ? А потом сделать merge.
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2017, 11:18
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

вы имеете в виду весь конфиг инстанса смержить с прототипом класса?
если да, то конечно технически можно и так сделать
constructor: function (config) {
    Ext.merge(this, config);
    // reset config object ..since we've just applied it manually
    config = {};
    this.callParent(arguments);
}

..но лично я бы не стал.
Не изучал код Ext.merge так-что не уверен что он обрабатывает например цикличные ссылки, а extjs их местами делает.
Да и для всех конфигов такое просто не нужно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить css одного div при наведении на другой с javascript? InkyThousand Общие вопросы Javascript 7 11.11.2014 16:35
Table - как избавиться от автоматич. уменьшения ширины при уменьшении размера экрана? eugen35 (X)HTML/CSS 5 22.08.2014 12:25
Как избежать полосы прокрутки при анимации Bizon4ik Общие вопросы Javascript 4 21.06.2014 13:51
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как задать изменение src при прокрутке chandler Элементы интерфейса 3 12.01.2012 01:23