覆盖核心 Drupal JS 函数以删除行为,我应该编辑 属性,还是将覆盖函数留空?

Overriding Core Drupal JS Function To Remove Behavior, Should I Edit Property, Or Leave Override Function Empty?

我们有一个用例,我们需要阻止 Drupal 的核心 ajax 错误处理提醒用户(我们正在自行处理错误报告)。之前另一位开发人员在核心 ajax.js 文件中注释掉了一行,以防止 Drupal 生成警告框,但我想在不触及核心的情况下处理它。

从核心开始,drupal.js:

/**
 * Displays a JavaScript error from an Ajax response when appropriate to do so.
 */
   Drupal.displayAjaxError = function (message) {
  // Skip displaying the message if the user deliberately aborted (for example,
  // by reloading the page or navigating to a different page) while the Ajax
  // request was still ongoing. See, for example, the discussion at
  // 
  // clicks-refresh.
  if (!Drupal.beforeUnloadCalled) {
    alert(message);
  }
};

我目前的解决方法是覆盖 Drupal.displayAjaxError 函数并更改 Drupal.beforeUnloadCalled 属性 来确定是否警告错误:

   var ajax_error_backup = Drupal.displayAjaxError;
   Drupal.displayAjaxError = function (message) {
     Drupal.beforeUnloadCalled = true;
     ajax_error_backup(message);
   };

我的问题是,这是否是一个合适的解决方案?我知道我也可以覆盖该函数并将其留空 - 花费更少的行,并且不调用对原始函数的另一个调用(并通过在 ajax_error_backup 中备份原始函数来保存我创建的对象)。 我是在增加复杂性以保持整洁,还是应该直接覆盖:

  Drupal.displayAjaxError = function (message) {
    //empty
  };

澄清一下——我的愿望是永远不要让这个 ajax 警报发生,所以我想保留东西 neat/tidy 和只是用一个空白的函数覆盖函数之间没有功能上的区别——没有希望此警报成功的情况。

在此先感谢您帮助这只老狗用新鲜的眼光思考问题。

在这种情况下,似乎没有一个选项明显优于另一个选项。应该具体情况具体处理,在这种情况下,这两种方法都可以。

我个人选择了覆盖函数再回调的稍微昂贵的方法,因为我觉得这样可能会多一些future-proof:

   var ajax_error_backup = Drupal.displayAjaxError;
   Drupal.displayAjaxError = function (message) {
     Drupal.beforeUnloadCalled = true;
     ajax_error_backup(message);
   };

如果 Drupal 将来要在其端扩展该功能,可能会有另一个我们不想覆盖的条件。

用空函数覆盖是最便宜的,但也可能有点笨拙。

似乎这两种方法都是有效的,并且可能是最好的处理方式 case-by-case。