Ext JS将额外的参数传递给处理程序

时间:2012-06-26 09:47:03

标签: extjs4.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'));
    }
},

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

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

  

fn:功能

     

通过单击配置的按钮或对话框关闭按钮或按返回按钮输入输入来解除对话框时调用的回调函数。

     

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

     

参数

     

-buttonId:String   按下按钮的ID,其中之一:           好           是           没有           取消

     

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

     

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

但我仍然无法做到这一点:(

2 个答案:

答案 0 :(得分: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);
   }
});

答案 1 :(得分: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'));
    }
},