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

コードを実行すると、コンソールに「config is undefined」と表示されます。

誰かが私が間違っていることを指摘できますか?

前もって感謝します、

t

4

2 に答える 2

2

空の構成をコンストラクターに渡すとエラーは回避されますが、残念ながら基本クラス ( Ext.Action) は後で依存するため、後で望ましくない結果が生じますthis.initialConfig。たとえば、それを呼び出した場合、期待される の代わりにeditUser.getText()返されます。undefined'Edit'

もう 1 つの方法は、コンストラクターをオーバーライドして引数なしの呼び出しを許可し、オーバーライドされた構成を適用することです。

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

Ext.Action コンストラクタによる

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

2行目で例外を取得しないように構成を指定する必要がありますconfig is undefined(正確にはconfig.itemId部分的に)。

必要に応じてコードを更新しますvar editUser = new App.action.EditAction({});(新しい空のオブジェクトを構成として渡します)。確かに、config オブジェクトにもいくつかのプロパティを追加できます。

于 2011-10-07T22:20:42.877 に答える