2016-05-10 8 views
0

Was ich nicht verstehe: bestimmte Schlüsselwörter scheinen für DocPad wie @Document reserviert zu sein, welche Wörter lassen Sie benutzerdefinierte Datenwerte verwenden?Basic DocPad: Variablen und erste Fehler

z.B. Ich verwende

<%= data.hostimagesurl %> 

aber ich habe

<%= page.hostimagesurl %> 

und

<%= site.hostimagesurl %> 

auch im Einsatz, kann ich diese gesehen nach oben machen? Gibt es bestimmte Werte, die ich verwenden muss?

Ich verstehe nicht, wo ich die Fallstricke entdecken kann, sind Bindestriche und Unterstriche erlaubt?

Ich stelle mir vor, das funktioniert wie Lenker, ich definiere das Tag geben Sie den Wert ein und es funktioniert einfach - ist diese Art zu denken richtig?

Ich bin auch verwirrt, warum mein DocPad-Layout nicht funktioniert. Ich erhalte nur einen Fehler

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) 

Der erste Fehler, den ich auf dieser Strecke passiert, sehen kann:

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"> 

machen index.html Datei wie folgt aussieht My:

--- 
title: "Welcome!" 
layout: "default" 
isPage: true 

hostimagesurl: "http://www.googel.com/" 

--- 

<p>Testing 1</p> 

Was auf Erde mache ich falsch?

+0

Wenn hostimagesurl ist die gesamte Site dann unter Template in Ihrem docpad.coffee Skript definieren: hostimagesurl: "http://www.googel.com/" und verwendet <% - @ hostimagesurl%> in Ihrer HTML-Datei. Ist Ihre index.html-Datei im Render-Ordner und benannt index.html.eco, so dass es diese Datei rendern wird? – user3257693

Antwort

0
@document 

ist nur Coffeescript (und öko) spezielle Syntax für

this.document 

Die Variable site kann in Ihrer docpad.coffee-Datei definiert werden, siehe http://docpad.org/docs/begin und die Suche nach docpadConfig

ich noch lerne und Ich kann Ihnen nicht von Ihrem page.whatever Code erzählen, aber sie werden oft innerhalb einer Schleife verwendet, in der die Variable im for loop code benannt ist.

0

In Ihrem Beispiel haben Sie den klassischen DocPad-Fehler beim Vergessen des @-Symbols gemacht, wenn Sie auf das aktuelle Dokument verweisen: @document ist definiert, aber document ist nicht definiert.

Ebenso auf hostimagesurl zugreifen würden Sie @document.hostimagesurl

standardmäßig zwei Objekte zu einem DocPad template/page/Layout übergeben werden aufrufen müssen. Die Eigenschaft templateData, die in der Datei docpad.coffee und dem aktuellen Dokumentobjekt definiert ist. Diese Objekte sind Eigenschaften des Templates this Kontext. Im Fall von templateData ist jede ihrer Eigenschaften ein Mitglied des this-Kontextes, während das Dokument selbst eine Eigenschaft von this ist.

In CoffeeScript und dem CoffeeScript basierten Vorlagensystem, ECO, this wird durch das Symbol @ bezeichnet.

Dies bedeutet, dass Sie innerhalb einer ECO-Vorlage mit @document auf das aktuelle Dokument zugreifen. Sie können auch auf @site.url oder @getPreparedTitle() zugreifen, die in der Datei docpad.coffee als Teil der templateData definiert sind.

Die Eigenschaften, die im Metadatenabschnitt Ihres Dokuments (zwischen ---) definiert sind, sind als Eigenschaften des Dokumentobjekts verfügbar.

Sehr oft Leute erstellen Variablen wie page beim Durchlaufen einer Sammlung. Diese lokalen Variablen benötigen nicht den this Kontext. Typischerweise dies so etwas wie:

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