1

messageBoxのハンドラ関数に余分なパラメータを渡したいです。

次のようなコンテキスト メニューを作成しました。

    onEventContextMenu: function (s, rec, e) {
    e.stopEvent();

    if (!s.ctx) {
        s.ctx = new Ext.menu.Menu({
            items: [{
                text: 'Delete event',
                iconCls: 'icon-delete',
                scope: this,
                handler : function() {
                Ext.MessageBox.show({
                                title : 'Reason',
                                msg : 'place reason:',
                                width : 300,
                                buttons : Ext.MessageBox.OKCANCEL,
                                multiline : true,
                                fn : this.showResultText(buttonId, text, rec)
                            });
                }
            }]
        });
    }
    s.ctx.rec = rec;
    s.ctx.showAt(e.getXY());
},

showResultText : function (btn, text, record){
alert(btn);
    if (btn == 'cancel') {
        alert(text + ' cancel');
    }
    if (btn == 'ok') {
        alert(record.get('Name'));
    }
},

そのため、ユーザーがイベントの削除をクリックすると、その理由を入力できます。彼が [OK] または [キャンセル] を押した後、ハンドラーを呼び出します。そこにあるボタンとテキストにアクセスできますが、追加のパラメーターを渡す必要があります。

Sencha のドキュメントを読むと、次のことがわかりました。

fn : 関数

構成されたボタンをクリックするか、ダイアログを閉じるボタンをクリックするか、入力を入力するために戻るボタンを押すことによって、ダイアログが閉じられたときに呼び出されるコールバック関数。

進行状況ダイアログと待機ダイアログは、ユーザー アクションに応答せず、プログラムでしか閉じることができないため、このオプションを無視します。必要な関数は、ダイアログを閉じた後に同じコードで呼び出す必要があります。渡されたパラメータ:

パラメーター

-buttonId : String 押されたボタンの ID。次のいずれか: ok yes no cancel

-text : prompt または multiline のいずれかが true の場合の入力フィールドの文字列値

-opt : Object show に渡される構成オブジェクト。

しかし、それでも私はこれを機能させることができません:(

4

2 に答える 2

4

The approach that I usually take is to pass additional data via the scope parameter:

Ext.MessageBox.show({
   ...
   scope: {
      obj: this,
      record: rec
   },
   fn: function(buttonId, text, option) {
      // Access properties specified in the 'scope' parameter via 'this'
      var obj = this.obj,
          record = this.record;

      obj.showResultText(buttonId, text, record);
   }
});
于 2012-07-03T17:12:36.207 に答える
1

このExt.Functionが見つかりました

Ext.MessageBox.show({
    title: 'Reason',
    msg: 'place reason:',
    width: 300,
    buttons: Ext.MessageBox.OKCANCEL,
    multiline: true,
    fn: Ext.Function.bind(this.showResultText, this, rec, true)
});

次に、showResultTextメソッドは次のようになります。

showResultText : function (btn, text, eventOptions, record){
    alert(btn);
    if (btn == 'cancel') {
        alert(text + ' cancel');
    }
    if (btn == 'ok') {
        alert(record.get('Name'));
    }
},
于 2012-07-02T19:56:14.903 に答える