0

当我尝试渲染时,我的 default.html.eco 布局生成了以下错误:

RangeError:超出最大调用堆栈大小

我的 docpad 版本是:v6.54.2,导致它的具体行是:

<%- @getBlock('scripts').add(['/vendor/foundation.min.js',
'/vendor/audiolib.js','/vendor/freqfinder.js','/vendor/modernizr.js']).toHTML() %>

如果我删除它,我会得到一个干净的构建。

请注意,它上面的样式块呈现得很好:

<%- @getBlock("styles").add(['/vendor/foundation.css']).toHTML() %>

所以我决定尝试在脚本块中截断该列表并且它有效:

<%- @getBlock("scripts").add(['/vendor/foundation.min.js']).toHTML() %>

关于如何解决这个问题的任何想法?如果我没有做错什么,我会提交一个错误 - docpad 的新手。

4

1 回答 1

2

你的代码中有换行符吗?当我从这里复制粘贴到我的布局文件时它失败了,但是如果我删除之间的换行符'/vendor/foundation.min.js',然后'/vendor/audiolib.js'它会按预期编译。

或者,您也可以使用.add()这样的命令字符串:

<%- @getBlock('scripts').add('/vendor/foundation.min.js').add( '/vendor/audiolib.js').add('/vendor/freqfinder.js').add('/vendor/modernizr.js').toHTML() %>

这对我来说也很好。

还有一个相关说明,以防其他人遇到此错误但没有任何换行符:collection.add(null)现在会导致相同的错误消息。所以,如果你正在做这样的事情:

<%- @getBlock("scripts").add( @getDocument().get('scripts') ).toHTML() %>

scripts如果您在每个页面上都没有元数据字段,它将消失。

但是,修复非常简单:

<%- @getBlock("scripts").add( @getDocument().get('scripts') or [] ).toHTML() %>
于 2013-11-01T04:31:35.157 回答