Basic DocPad:变量和第一个错误
我不明白的是:某些关键字似乎是为 DocPad 保留的,例如 @document,哪些词允许我使用自定义数据值?
例如,我正在使用
<%= data.hostimagesurl %>
但我看到
<%= page.hostimagesurl %>
和
<%= site.hostimagesurl %>
也在使用中,我可以编造这些吗?我必须使用某些值吗?
我不明白在哪里可以发现陷阱,是否允许使用连字符和下划线?
我想象这就像车把一样工作,我定义标签输入值,它就可以工作 - 这种想法正确吗?
我也不明白为什么我的 DocPad 布局不起作用。我刚刚收到一个错误
error: Something went wrong while rendering: /Users/***/my-new-website/src/render/index.html
The error follows:
ReferenceError: document is not defined
at Object.eval (<anonymous>:55:29)
at Object.eval (<anonymous>:67:8)
at eval (<anonymous>:69:6)
at Function.eco.render (/Users/***/my-new-website/node_modules/eco/lib/index.js:26:25)
at EcoPlugin.render (/Users/***/my-new-website/node_modules/docpad-plugin-eco/out/eco.plugin.js:23:32)
at ambi (/Users/***/my-new-website/node_modules/event-emitter-grouped/node_modules/ambi/out/lib/ambi.js:57:27)
at Task.<anonymous> (/Users/***/my-new-website/node_modules/event-emitter-grouped/out/lib/event-emitter-grouped.js:45:23)
at ambi (/Users/***/my-new-website/node_modules/ambi/es5/lib/ambi.js:98:14)
at Domain.fireMethod (/Users/***/my-new-website/node_modules/taskgroup/out/lib/taskgroup.js:397:23)
at Domain.run (domain.js:228:14)
at Task.fire (/Users/***/my-new-website/node_modules/taskgroup/out/lib/taskgroup.js:435:27)
at Immediate._onImmediate (/Users/***/my-new-website/node_modules/taskgroup/out/lib/taskgroup.js:452:26)
at processImmediate [as _immediateCallback] (timers.js:383:17)
我看到的第一个错误发生在这一行:
background-image:url(<%= data.hostimagesurl %>bg.gif);
<body style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;min-width:100%; color:#353535; background-color:#f9f9f9; background-image:url(<%= data.hostimagesurl %>bg.gif); background-repeat: repeat; background-position:center top; font-family: Helvetica, sans-serif; font-size:13px; margin: 0; padding: 0;" yahoo="fix" bgcolor="#f9f9f9">
我的渲染 index.html 文件如下所示:
---
title: "Welcome!"
layout: "default"
isPage: true
hostimagesurl: "http://www.googel.com/"
---
<p>Testing 1</p>
我到底做错了什么?
@document
只是 CoffeeScript(和 eco)针对
this.document
的特殊语法>
变量
site
可以在您的
docpad.coffee
文件中定义,请参阅
http://docpad.org/docs/begin
并搜索
docpadConfig
我仍在学习,无法告诉您有关您的
page.whatever
代码的信息,但它们通常在循环内使用,其中变量在 for 循环代码中命名。
在您的示例中,您犯了一个典型的 DocPad 错误,即在引用当前文档时忘记了
@
符号:
@document
已定义,但
document
未定义。
同样,要访问
hostimagesurl
,您需要调用
@document.hostimagesurl
默认情况下,两个对象会传递给 DocPad 模板/页面/布局。docpad.coffee 文件中定义的
templateData
属性和当前文档对象。这些对象是模板
this
上下文的属性。对于
templateData
,其每个属性都是
this
上下文的成员,而文档本身是
this
的属性。
在 CoffeeScript 和基于 CoffeeScript 的模板系统 ECO 中,
this
由
@
符号引用。
这意味着在 ECO 模板中,您可以使用
@document
访问当前文档。您还可以访问
@site.url
或
@getPreparedTitle()
,它们在 docpad.coffee 文件中定义为
templateData
的一部分。
文档元数据部分中定义的属性(在
---
之间)可用作文档对象的属性。
人们在循环遍历集合时经常会创建
page
之类的变量。这些局部变量不需要
this
上下文。通常像这样:
<%pages = @getCollection('pages').toJSON()%>
<ul>
<%for page in pages:%>
<li>
<a href="<%-page.hostimagesurl%>"><%-page.title%></a>
</li>
<%end%>
</ul>