Fi1osof 29 мая 2016 1 2
Пилю на проекте расширенную панель управления пользователями, и по традиции решил не переписывать все с нуля, а просто взять и расширить родной MODX-компонент MODx.grid.User.
CustomComponent.grid.UsersGrid = function(config) {
    config = config || {};
    
    Ext.applyIf(config, {
        baseParams: {
            action: 'custom/security/user/getList'
            ,usergroup: MODx.request['usergroup'] ? MODx.request['usergroup'] : ''
        }
    });
     
    CustomComponent.grid.UsersGrid.superclass.constructor.call(this, config); 
    
}

Ext.extend(CustomComponent.grid.UsersGrid, MODx.grid.User,{
     
});

Ext.reg('modx-grid-user', CustomComponent.grid.UsersGrid);

Да вот только не заладилось… Мои изменения не воспринимаются. Стал копать, оказалось компонент UserKarma так же переопределяет родной компонент и затирает мои изменения (точнее по новой создает компонент из базового). Возник вопрос — как же переопределять так, чтобы можно было и другим поверх переопределяться? Получился вот такой вариант:
var _prototype = Ext.ComponentMgr.types['modx-grid-user'];

CustomComponent.grid.UsersGrid = function(config) {
    config = config || {};
    
    Ext.applyIf(config, {
        baseParams: {
            action: 'custom/security/user/getList'
            ,usergroup: MODx.request['usergroup'] ? MODx.request['usergroup'] : ''
        }
    });
     
    CustomComponent.grid.UsersGrid.superclass.constructor.call(this, config); 
    
}

Ext.extend(CustomComponent.grid.UsersGrid, _prototype,{
     
});

Ext.reg('modx-grid-user', CustomComponent.grid.UsersGrid);

Здесь переменная _prototype — это всегда актуальная зарегистрированная функция-прототип компонента (зарегистрированного по xtype 'modx-grid-user'). Вот так уже два переопределения не особо конфликтуют друг с другом. Здесь конечно же возможны логические ошибки, если они начнут друг у друга переопределять параметры, а не дописывать их новые, но тем не менее в конечном гриде учтены дополнения обоих расширенных компонентов. Предлагаю взять этот метод как стандартный в переопределении базовых компонентов. Тогда не будет явных конфликтов при использовании нескольких расширений.
2 комментария
M
MisterN 29 мая 2016г в 22:18 #
По-теме могу только спасибо сказать. А теперь буду офтопить.
От назовите меня занудой, но разширение.

еще дино предложение — злостный офтоп: можете сделать возможность переголосовать (там где палец вверх и вниз)? А то я бывало промахивался, вместо "+" ставил минус, по-ошибки, а потом все, не поменяешь.
Fi1osof1
Fi1osof 29 мая 2016г в 22:21 #
Не за что.
Поправил.
Когда-нибудь сделаем. Просто руки не доходят.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.