【问题标题】:ExtJS Ex.Msg adding additional listenerExtJS Ex.Msg 添加额外的监听器
【发布时间】:2021-06-10 19:34:21
【问题描述】:

我有一个必须使用的外部 javascript 库。该库使用 ExtJS 6.6。这个库有这个代码

var confirmationCallback = function(btn) {
  if (btn == "yes") {
    //do something
  }
};

Ext.Msg.show({
  title:  'Confirm Operation',
  buttons: Ext.MessageBox.YESNO,
  fn: confirmationCallback,
  icon: Ext.MessageBox.WARNING,
  msg: 'Are you sure?',
  scope: this
});

我的问题是当用户单击“否”按钮并且库中没有此处理程序时,我需要做一些事情。他们只处理是按钮。此外,由于许可证和许多其他原因,我无法修改此库。

我的问题:我可以以某种方式添加无按钮句柄吗?我只能将我的javascript代码放在Ext.Msg.show调用之前(这个地方的库中有一个自定义点)。我尝试了Ext.Msg.on("hide", console.log("hide listener")); 之类的方法和其他一些方法,但它不起作用。理想情况下,最好在他们的回调代码末尾添加我的部分。或者将我的代码添加到消息框的隐藏/关闭事件中。

【问题讨论】:

    标签: javascript extjs event-handling listener


    【解决方案1】:

    如果你执行:

    Ext.Msg.show({
        title: 'Confirm Operation',
        buttons: Ext.MessageBox.YESNO,
    
        icon: Ext.MessageBox.WARNING,
        msg: 'Are you sure?',
        fn: function (buttonId) {
            alert('You pressed the "' + buttonId + '" button.');
        },
        scope: this
    });
    

    您可以在 buttonId 中看到您收到了“是”、“否”或“取消”。

    然后,在您的代码中:

    var confirmationCallback = function(btn) {
      if (btn == "yes") {
        //do something
      } else if (btn == "no") {
        //do something
      } else if (btn == "cancel") {
        //The user has closed the dialog.
      }
    };
    

    更新

    您可以使用 ExtJs Ext.override 函数覆盖 Ext.window.MessageBox。这是一个有效的选项,您不会违反许可条款。

    我写过 Sencha Fiddle 显示解决方案:https://fiddle.sencha.com/#view/editor&fiddle/3ch0

    【讨论】:

    • 这很清楚。问题是confirmationCallback 在外部库中,我无法更改。我需要做同样的事情,但不改变confirmationCallback。通过事件侦听器或 Ext.apply 或其他方式注入我的代码。
    • 如果你检查我的回答,你可以看到对话框何时关闭而不按任何按钮,确认回调被称为“取消”作为 btn。
    • 如果您检查我的问题,那么您会看到回调看起来像这样,我无法更改它。 var confirmationCallback = function(btn) { if (btn == "yes") {//do something}}; 没有“取消”或“否”处理程序。回调的设计方式是,当用户单击“否”或关闭窗口时,它什么也不做。你真的没有看我的问题。
    • 我用解决方案更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2011-10-12
    • 2012-01-22
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多