2016-05-10 3 views
0

Что я не понимаю: некоторые ключевые слова, по-видимому, зарезервированы для DocPad, например @document, какие слова позволяют мне использовать пользовательские значения данных?Базовый DocPad: переменные и первые ошибки

например. Я использую

<%= 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> 

Что на Земля, я делаю неправильно?

+0

Если hostimagesurl является то определить по всему сайту его в docpad.coffee сценарий под templateData: hostimagesurl: "http://www.googel.com/" и использовать <% - @ hostimagesurl%> в вашем html-файле. Является вашим файлом index.html в папке рендеринга и назван index.html.eco, чтобы он отображал этот файл? – user3257693

ответ

0
@document 

просто CoffeeScript (и эко) специальный синтаксис для

this.document 

Переменная site может быть определена в файле docpad.coffee см http://docpad.org/docs/begin и поиск docpadConfig

Я все еще учусь и не могут рассказать вам о вашем коде page.whatever, но они часто используются внутри цикла, в котором указанная переменная содержится в коде цикла for.

0

В вашем примере вы сделали классическую ошибку DocPad забыли символ @ при обращении к текущему документу: @document определен, но document нет.

Кроме того, чтобы получить доступ к hostimagesurl вам нужно будет позвонить @document.hostimagesurl

По умолчанию два объекта передается в шаблоне DocPad/страницы/макет. Свойство templateData, определенное в файле docpad.coffee и текущем объекте документа. Эти объекты являются свойствами шаблона 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> 
Смежные вопросы