extjsmvc中的可重用操作

extjsmvc中的可重用操作,extjs,extjs-mvc,Extjs,Extjs Mvc,我有一个带有工具栏和关联菜单的网格面板。 工具栏有一个编辑按钮,关联菜单有一个编辑菜单项。 两者共享相同的属性(文本、图标和处理程序) Ext有一个叫做Action的东西,它可以在组件之间共享功能等,但是直到现在我还没有成功地让它在MVC架构中工作 (我正在4.0中使用新的MVC体系结构) 我的动作类如下所示: Ext.define( 'App.action.EditAction', { extend: 'Ext.Action', text: 'Edit', handle

我有一个带有工具栏和关联菜单的网格面板。 工具栏有一个编辑按钮,关联菜单有一个编辑菜单项。 两者共享相同的属性(文本、图标和处理程序)

Ext有一个叫做Action的东西,它可以在组件之间共享功能等,但是直到现在我还没有成功地让它在MVC架构中工作 (我正在4.0中使用新的MVC体系结构)

我的动作类如下所示:

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

根据外部动作构造器

constructor : function(config){
    this.initialConfig = config;
    this.itemId = config.itemId = (config.itemId || config.id || Ext.id());
    this.items = [];
}
您必须提供config,才能在第二行(确切地说是在
config.itemId
部分)中获得
config is undefined
异常

将代码更新为
var editUser=new App.action.EditAction({})应该有帮助(将新的空对象作为配置传递)。

当然,您也可以向config对象添加一些属性

将空配置传递给构造函数将避免错误,但稍后会产生不必要的后果,因为很遗憾,基类(
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' ,
});