在本地尝试过。并解决问题:
debug: Emitting the event: extendTemplateData
→ [2014-02-14 01:38:50.030] [/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/docpad.js:1184] [DocPad.emitSerial]
error: Something went wrong with the action
→ [2014-02-14 01:38:50.037] [/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/interfaces/console.js:107] [ConsoleInterface.destroyWithError]
error: An error occured:
ReferenceError: getGigsData is not defined
at Object.docpadConfig.events.extendTemplateData (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/docpad.coffee:42:44)
at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:25:27)
at DocPad.<anonymous> (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/docpad.js:995:25)
at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:23:18)
at Task.<anonymous> (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/event-emitter-grouped/out/lib/event-emitter-grouped.js:45:23)
at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:23:18)
at fire (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:163:25)
at b (domain.js:183:18)
at Domain.run (domain.js:123:23)
at Task.fire (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:173:25)
at processImmediate [as _immediateCallback] (timers.js:330:15)
这表明错误实际上是在我们的事件处理程序内部,而不是在我们的代码内部。出于某种原因,getGigsData 没有被设置,尽管我们:
getGigsData: ->
g = { "date" : "3-4-2013", "location" : "Gent" }
return g
检查代码,作为 CoffeeScript 用户,我发现了问题。作为非coffeescript用户,可以使用coffeescript网站http://coffeescript.org上的coffeescript编译器查看编译后的javascript,即:
({
events: {
extendTemplateData: function(opts) {
({
getGigsData: function() {
var g;
g = {
"date": "3-4-2013",
"location": "Gent"
};
return g;
}
});
return opts.templateData["getGigsData"] = getGigsData;
}
}
});
正如我们所见,这绝对不是我们所期望的。我们只是在一个对象中定义 getGigsData,然后什么都不做。
问题是我们使用冒号而不是等号,所以getGigsData: -> 而不是getGigsData = ->。这不是咖啡脚本的事情,但如果这也是 javascript,你也会遇到同样的问题,尽管由于对象定义周围有必要的波浪形大括号,javascript 可能更明显。
作为旁注,如果您出于某种原因更喜欢将 JavaScript 与 DocPad 一起使用,则完全支持。您可以为您的 docpad 配置文件使用 docpad.json 或 docpad.js 文件。另一种选择是继续使用 CoffeeScript,然后将 JavaScript 代码包装在反引号中,请参阅:http://coffeescript.org/#embedded