Многоразовое действие в Ext JS MVC - PullRequest
1 голос
/ 06 октября 2011

У меня есть Grid Panel с панелью инструментов и контекстным меню.На панели инструментов есть кнопка редактирования, а в контекстном меню есть пункт меню редактирования.Оба имеют одни и те же свойства (текст, значок и обработчик)

В Ext есть что-то под названием Action, которое позволяет обмениваться функциональностью и т. Д. Между компонентами, но до сих пор у меня не было успеха заставить его работать в MVCархитектура (я использую новую архитектуру MVC в 4.0)

Мой класс Action выглядит следующим образом:

Ext.define( 'App.action.EditAction', {
    extend: 'Ext.Action',
    text: 'Edit',
    handler: function()
    {
        Ext.Msg.alert('Click', 'You did something.');
    },
    iconCls: 'icon-edit-user' ,
});

И в моем контекстном меню

requires: ['App.action.EditAction'],
initComponent: function()
{
    var editUser = new App.action.EditAction();

    this.items = [
        editUser,
        {
            // More menuitems
        }
        ...
     ];

     this.callParent(arguments);

При запускекод, который я получаю "config is undefined" в консоли.

Может кто-нибудь указать, что я делаю неправильно?

Заранее спасибо,

t

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Передача пустой конфигурации вашему конструктору позволит избежать ошибки, но позже будет иметь нежелательные последствия, потому что, к сожалению, базовый класс (Ext.Action) будет опираться на this.initialConfig в дальнейшем.Например, если вы вызвали editUser.getText(), он вернул бы undefined вместо ожидаемого 'Edit'.

. Другой подход - переопределить ваш конструктор, чтобы разрешить вызов без аргументов, и применить переопределенную конфигурацию:

Ext.define( 'App.action.EditAction', {
    extend: 'Ext.Action',
    text: 'Edit',
    constructor: function(config) 
    {
        config = Ext.applyIf(config || {}, this);
        this.callParent([config]);
    },
    handler: function()
    {
        Ext.Msg.alert('Click', 'You did something.');
    },
    iconCls: 'icon-edit-user' ,
});
0 голосов
/ 08 октября 2011

Согласно конструктору Ext.Action

constructor : function(config){
    this.initialConfig = config;
    this.itemId = config.itemId = (config.itemId || config.id || Ext.id());
    this.items = [];
}

Вы должны указать конфигурацию, чтобы исключить config is undefined исключение во второй строке (именно в части config.itemId).

Обновление вашегокод как var editUser = new App.action.EditAction({}); должен помочь (передача нового пустого объекта как config).Конечно, вы также можете добавить некоторые свойства в объект конфигурации.

...