覆盖另一个脚本中的全日历 JavaScript 函数



我是js的新手,我想覆盖/覆盖另一个脚本(my-fullcalendar.js(中的一些fullcalendar函数,以便为自己进行一些更改。 例如,函数名称是:

格式

范围和旧时刻格式。

formatRange 可以从这个.$.fullCalendar.formatRange 访问,但 oldMomentFormat 不能通过这种链访问。但即使我在 full-calendar 中做这样的事情.js:

;(function () {
      function MyformatRange(date1, date2, formatStr, separator, isRTL) {
          console.log( "MyformatRange");
          //other parts is exactly the same
          // ...
      }
      this.$.fullCalendar.formatRange=MyformatRange;
      console.log(this);
})();

没有任何反应,因为没有生成日志,甚至逐行跟踪也不会从这里传递。 但是当在控制台日志中观察到"this"时,MyformatRange 被原始 formatRange 替换。另一个问题是我如何覆盖/覆盖不在窗口层次结构中的oldMomentFormat函数来访问(或者我找不到它(?

好的,让我们简化问题。本质上,您有这种情况:

var makeFunObject = function () {
  var doSomething = function (msg) {
    console.log(msg);
  };
  var haveFun = function () {
    doSomething( "fun!");
  };
  return {
    doSomething : doSomething,
    haveFun : haveFun
  };
};

换句话说,你有一个创建闭包的函数。闭包内部有两个"私有"函数,其中一个调用另一个。但是这两个函数似乎都在返回的对象中"公开"。

你写一些代码:

var myFunObject = makeFunObject();
myFunObject.haveFun(); // fun!

是的,似乎工作得很好。现在让我们替换返回对象中的 doSomething 函数并再次调用 haveFun

myFunObject.doSomething = function (msg) {
  console.log("My new function: " + msg);
};
myFunObject.haveFun(); // fun! <== wait what?

但是等等!未调用新的替换函数!没错:haveFun函数被明确编写为调用内部函数。事实上,它对对象中公开的函数一无所知。

这是因为你不能以这种方式替换内部的私有函数(事实上,你不能在不改变原始代码的情况下替换它(。

现在回到 FullCalendar 代码:您正在替换对象中的外部函数,但内部函数是由 FullCalendar 中的所有其他函数调用的函数

我意识到这是一个老问题,但是当我想覆盖getEventTimeText函数时,我遇到了同样的问题。

我能够从我自己的 JS 文件中完成此操作,如下所示:

$.fullCalendar.Grid.mixin({
    getEventTimeText: function (range, formatStr, displayEnd) {
        //custom version of this function
    }
});

因此,就您尝试覆盖的功能而言,您应该能够通过以下方式执行此操作:

$.fullCalendar.View.mixin({
    formatRange: function (range, formatStr, separator) {
        //custom formatRange function
    }
});

注意:请确保在您实际创建日历的位置之前运行此操作。另请注意,您需要确保在正确的位置覆盖函数。例如,getEventTimeText$.fullCalendar.Grid,而formatRange$.fullCalendar.View

希望这对最终解决这个问题的其他人有所帮助。

相关内容

  • 没有找到相关文章

最新更新