重写Core Drupal JS函数以删除行为,我应该编辑属性,还是将覆盖功能保留为空?

时间:2018-03-15 16:23:04

标签: javascript drupal drupal-7

我们有一个用例,我们需要阻止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
  // http://stackoverflow.com/questions/699941/handle-ajax-error-when-a-user-
  // 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警报,所以我保持整洁/整洁的愿望与仅用空白覆盖功能之间没有功能差异 - 不存在需要的情况这个警报要成功。

提前感谢帮助这只老狗用新鲜的眼睛思考。

1 个答案:

答案 0 :(得分:0)

在这种情况下,没有一个选项似乎明显优于另一个选项。它应该根据具体情况进行处理,在这种情况下,任何一种方法都是足够的。

我个人选择使用稍微更昂贵的方法来覆盖函数并回调它,因为我觉得它可能会更具有前瞻性:

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

如果Drupal将来会扩展功能,可能会有另一个我们不想覆盖的情况。

覆盖空函数将是最便宜的,但也可能有点沉重。

似乎任何一种方法都是有效的,并且最好逐案处理。