我对将mongo数据添加到模板数据感到困惑。我甚至没有开始尝试从数据库中获取数据,因为我无法获取模板来查看测试数据(见下文)。目前这是在docpad.coffee中,但最终g将是mongoDB的输出。
events:
extendTemplateData: (opts) ->
# {templateData} = opts
getGigsData: ->
g = { "date" : "3-4-2013", "location" : "Gent" }
return g
opts.templateData["getGigsData"] = getGigsData
我希望通过<%= @getGigsData().date %>
访问它
非常感谢您的指导
我应该补充一点,这个设计是基于想要让乐队轻松添加演出,而不让他们自己编辑页面内容,因为我担心他们会搞砸标记 - 如果有其他方法可以实现这一点目标,我很高兴听到。
答案 0 :(得分:1)
在当地尝试过。并且遇到了问题:
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 = ->
。这不是一个coffeescript的事情,但如果这也是javascript你会遇到同样的问题,虽然javascript可能会更明显,因为围绕对象定义必要的波浪形支撑。
作为旁注,如果您因任何原因喜欢使用带有DocPad的JavaScript,那么完全支持。您可以使用docpad.json
或docpad.js
文件作为docpad配置文件。另一个选择是继续使用CoffeeScript,然后在反引号中包装JavaScript代码,请参阅:http://coffeescript.org/#embedded