1

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

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

我的 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);

运行代码时,我在控制台中得到“配置未定义”。

谁能指出我做错了什么?

提前致谢,

4

2 回答 2

2

将空配置传递给您的构造函数将避免错误,但稍后会产生不良后果,因为不幸的是,基类 ( 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' ,
});
于 2012-02-07T18:29:36.993 回答
0

As per Ext.Action constructor

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

You must supply config not to get config is undefined exception in the second line (precisely in config.itemId part).

Updating your code as var editUser = new App.action.EditAction({}); should help(passing new empty object as config). Surely, you could add some properties to the config object too.

于 2011-10-07T22:20:42.877 回答