3

アプリケーション全体で再利用できるように、ビュー内で MessageBox を拡張しようとしています。

そうすると、メッセージボックスを便利にするデフォルトの機能の一部が失われるようです (メッセージ、ボタンの定義、アイコンの定義、デフォルトのドラッグ制約など)。構成は show() 関数内で定義する必要があるように思われるため、ドキュメンテーションは少し混乱します。ビュー内でそれらを設定する方法がわかりません。

メッセージボックスコンポーネントをビューとして本当に拡張するにはどうすればよいですか?

基本的な MessageBox (ビューで作成したいもの):

Ext.Msg.show({
     title:'Error',
     msg: 'There was an error.',
     buttons: Ext.Msg.YESNOCANCEL,
     icon: Ext.Msg.QUESTION
});

レンダリング:

通常のメッセージボックス

しかし、私が自分の見解を示すとき:

Ext.create('IOL.view.app.Message').show();

私は基本的にバニラのパネル/ウィンドウコンポーネントになります

Ext.define('IOL.view.app.Message', {

    extend : 'Ext.window.Window',

    config: {

    },

    constructor: function(config) {
        this.initConfig(config);
        this.callParent(arguments);
    },


    initComponent : function() {

        Ext.apply(this, {
            xtype: 'messagebox',
            width: 400,
            height: 200,
            title:'Error',
            html: 'There was an error.',
            buttons: [
                { text: 'Button 1' }
            ]

        });

        this.callParent(arguments);
    }// initComponent
});

レンダリング:

ここに画像の説明を入力

4

1 に答える 1

4

メッセージボックス構成を拡張しExt.window.Windowて適用しているようです。なぜ拡張しないのですかExt.window.MessageBox

Ext.define('IOL.view.app.Message', {
    extend : 'Ext.window.MessageBox',
    width: 400,
    height: 200,
    title: 'Error',
    html: 'There was an error.',
    buttons: Ext.Msg.YESNOCANCEL,
    icon: Ext.Msg.ERROR,

    // whatever else you want to do
    initComponent : function() {

        this.callParent(arguments);
    }
});

@EricCook は以下の良い点を挙げています。このMessageBoxクラスは、実際にはサブクラス化するためではなく、アプリでシングルトンとして再利用するように設計されています。

あなたの質問であなたは言った:

アプリケーション全体で再利用できるように、ビュー内で MessageBox を拡張しようとしています

通常の方法で呼び出す別のタイプのメッセージボックスを作成したい場合は、独自のボタンまたはアイコンでExt.Msg.show拡張できると思います。MessageBox

しかし、通常の使用では、これを拡張する必要はありません。アプリで繰り返し使用するために、次のようにコントローラーで必要なメッセージ ボックス構成への参照を保持できます。

// SomeController.js
errorMsg: {
     title:'Error',
     msg: 'There was an error.',
     buttons: Ext.Msg.YESNOCANCEL,
     icon: Ext.Msg.QUESTION
},

次に、そのタイプのメッセージを呼び出したいときはいつでも使用できます(スコープがコントローラー自体であると仮定するか、事前にコントローラーへの参照を取得できると仮定します):

Ext.Msg.show(this.errorMsg);
于 2012-08-28T17:27:18.123 に答える