Grails日历插件抛出堆栈/递归错误

时间:2011-09-26 07:07:27

标签: grails plugins calendar jscalendar

日历插件版本:CURRENT RELEASE 1.2.1

我按照grails插件文档中提到的步骤操作,在所有类型的浏览器中都出现以下错误

Chrome 14.0835:未捕获RangeError:超出最大Callstack大小。

Firefox 6.02:太多递归calendar.js第1851行

IE 9:堆栈空间calendar.js第1850行

4 个答案:

答案 0 :(得分:4)

违规的jscalendar代码是这样的:

Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    d.__msh_oldSetFullYear(y);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    this.__msh_oldSetFullYear(y);
};

哪个重新定义Date.setFullYear()。请查看此"old jscalendar" page上的评论#124和#125。

评论#124(由Chris Lively撰写)

建议更新calendar.js(靠近底部,~1850行)。

  

对于那些得到递归错误的人。你只需要评论几个   线。见下文。

//Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    //d.msh_oldSetFullYear(y);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    //this._msholdSetFullYear(y);
};

评论#125(拉里萨的回复)

  

由于包含多个日历,因此会出现递归问题   页面上的JavaScript。因此,Date补丁重新定义了setFullYear   函数执行两次,并在执行时导致无限循环。我们   通过确保仅重新定义一次函数来修复它:

if(Date.prototype.msh_oldSetFullYear == null) {
    Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear;
}

这两个都建议更新calendar.js,这是不理想的,因为它是随插件一起提供的。

两个建议:

  • 确保您没有两次导入日历资源。您的主要布局中是否有<calendar:resources/> 您的视图GSP?如果是这样,请删除其中一个。
  • 如果这不起作用,也许使用不同的插件。日历插件看起来好像有一段时间没有更新(它使用旧版本的jscalendar)。如果你有野心,你可以自己更新插件!

答案 1 :(得分:1)

这对我有用:

if (Date.prototype.__msh_oldSetFullYear == null) {
    Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
}
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    Date.prototype.__msh_oldSetFullYear.apply(d, arguments);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    Date.prototype.__msh_oldSetFullYear.apply(this, arguments);
};

答案 2 :(得分:0)

我解决这个问题的方法是

1)下载了插件的源代码 2)在本地创建了一个具有相同名称的插件。 3)将原始源文件复制到我创建的本地插件 4)如上所述更改了javascript文件 5)编译并打包插件 6)删除了我的主项目中的旧插件 7)从步骤5创建的zip文件安装新创建的插件。

它就像一个魅力。

感谢Rob Hruska指出我在javascript文件中发表评论

答案 3 :(得分:0)

我遇到了同样的问题,我已经将<calendar:resources/>放在我的主jsp中以及在jsp中呈现的模板中。删除其中一个解决了这个问题。