【问题标题】:Basic DocPad: variables and first errorsBasic DocPad:变量和第一个错误
【发布时间】:2016-09-05 15:07:37
【问题描述】:

我不明白的是:某些关键字似乎是为 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>

我到底做错了什么?

【问题讨论】:

  • 如果 hostimagesurl 是站点范围的,那么在你的 docpad.coffee 脚本中的 templateData: hostimagesurl: "googel.com" 下定义它并在你的 html 文件中使用 。是你的 index.html在 render 文件夹中的文件并命名为 index.html.eco 以便渲染该文件?

标签: html coffeescript docpad eco


【解决方案1】:
@document

只是CoffeeScript(和eco)的特殊语法

this.document

变量site可以在你的docpad.coffee文件中定义,查看http://docpad.org/docs/begin并搜索docpadConfig

我仍在学习,无法告诉您有关您的 page.whatever 代码的信息,但它们通常用于循环内部,其中变量在 for 循环代码中命名。

【讨论】:

    【解决方案2】:

    在您的示例中,您犯了一个经典的 DocPad 错误,即在引用当前文档时忘记了 @ 符号:@document 已定义,但 document 未定义。

    同样,要访问hostimagesurl,您需要致电@document.hostimagesurl

    默认情况下,两个对象被传递给 DocPad 模板/页面/布局。 docpad.coffee 文件和当前文档对象中定义的templateData 属性。这些对象是模板this 上下文的属性。在templateData 的情况下,它的每个属性都是this 上下文的成员,而文档本身是this 的属性。

    在 CoffeeScript 和基于 CoffeeScript 的模板系统中,ECO,this@ 符号引用。

    这意味着在 ECO 模板中,您可以使用 @document 访问当前文档。您还可以访问在 docpad.coffee 文件中作为templateData 的一部分定义的@site.url@getPreparedTitle()

    在文档的元数据部分(--- 之间)定义的属性可用作文档对象的属性。

    人们经常会在遍历集合时创建像page 这样的变量。这些局部变量不需要this 上下文。通常是这样的:

    <%pages = @getCollection('pages').toJSON()%>
    <ul>
        <%for page in pages:%>
            <li>
                <a href="<%-page.hostimagesurl%>"><%-page.title%></a>
            </li>
        <%end%>
    </ul>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多