1

我想将额外的参数传递给消息框的处理函数。

我创建了一个这样的上下文菜单:

    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'));
    }
},

因此,当用户单击删除事件时,他可以输入他这样做的原因。在他按下确定或取消后,我打电话给处理程序。我可以在那里访问按钮和文本,但我需要传递额外的参数。

阅读 Sencha 文档我发现了这个:

fn : 函数

一个回调函数,当通过单击配置的按钮或对话框关闭按钮或按返回按钮输入输入来关闭对话框时调用该回调函数。

进度和等待对话框将忽略此选项,因为它们不响应用户操作并且只能以编程方式关闭,因此任何必需的函数都应在关闭对话框后由相同的代码调用。传递的参数:

参数

-buttonId : String 按下按钮的ID,其中之一:ok yes no cancel

-text : 如果提示或多行为真,则输入字段的字符串值

-opt : Object 传递给 show 的配置对象。

但是我仍然无法正常工作:(

4

2 回答 2

4

我通常采取的方法是通过scope参数传递额外的数据:

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 回答