2013-07-07 22 views
1

我在對'@content'進行調用後從佈局文件中拉出頁尾腳本(或其他內容)時遇到問題。 「我正在使用coffeekup模板,並具有以下default.html.coffee佈局文件。在引用'content'模板數據變量之後在Docpad coffeekup佈局文件中包含腳本/內容

doctype 5 
html -> 

    head -> 

    meta(charset:"utf-8") 
    title("Docpad") 
    if @document.description? 
     meta(name:"description", content:@document.description) 

    stylesheets = ['/styles/app.css'] 
    @getBlock('styles').add(stylesheets).toHTML() 

    body -> 

    div class:"row", -> 
     div class:"large-12 columns", -> 
     h1(class:"docs header", "Header") 
     hr() 

    @content 
    @getBlock('scripts').toHTML() 

我運行中的問題是,「@content」正確地產生並呈現只如果沒有遵循它的每一頁的內容(如果@getBlock(「腳本」)線以上,例如,被刪除或註釋掉)。但是,使用上面的代碼,腳本的getBlock調用會成功,但'@content'不會插入內容。任何幫助表示感謝,謝謝。

回答

1

讓我們來看看你的代碼在那裏編譯的JavaScript。我們可以使用coffeescript.org做到這一點的編譯器:

doctype(5); 

html(function() { 
    head(function() { 
    var stylesheets; 
    meta({ 
     charset: "utf-8" 
    }); 
    title("Docpad"); 
    if (this.document.description != null) { 
     meta({ 
     name: "description", 
     content: this.document.description 
     }); 
    } 
    stylesheets = ['/styles/app.css']; 
    return this.getBlock('styles').add(stylesheets).toHTML(); 
    }); 
    return body(function() { 
    div({ 
     "class": "row" 
    }, function() { 
     return div({ 
     "class": "large-12 columns" 
     }, function() { 
     h1({ 
      "class": "docs header" 
     }, "Header"); 
     return hr(); 
     }); 
    }); 
    this.content; 
    return this.getBlock('scripts').toHTML(); 
    }); 
}); 

注意如何this.content僅僅是一個不可訴的聲明。就像我這樣做:"a"; "b"; "c"; "d"什麼都不會做。

您提供的代碼的使用或意圖似乎意味着對CoffeeKup或CoffeeScript工作方式的誤解,因此讓我評估一下發生了什麼,以及爲什麼有時候它有效,有時卻不會。

當我們做div -> "blah"它明確div(function(){return "blah";})它說通過div一個函數,當被調用將返回字符串等等。現在CoffeeKup知道任何返回給它的字符串,它應該爲了方便而呈現。但是,由於我們不能返回多個東西(因爲第一個返回塊存在),我們該怎麼做?

CoffeeKup提供text功能,使我們能夠做的事:

div -> 
    text "a" 
    text "b" 

哪個編譯時的樣子:

div(function() { 
    text("a"); 
    return text("b"); 
}); 

這正是我們想要的,作爲text通話,就像div和所有其他元素調用,不返回一個字符串,並直接輸出內容。

因此,所有的一切,解決的辦法是前綴:

@content 
@getBlock('scripts').toHTML() 

隨着text電話,所以就變成:

text @content 
text @getBlock('scripts').toHTML() 

如果你想逃避的HTML實體(所以轉換<&lt;),那麼你會想要添加h電話,就像這樣h "content to be escaped"並結合text將看起來像text h "content to be escaped" - 但是這只是一些東西請注意,不是你現在或在這裏需要的東西。

+0

是的,非常感謝您的快速響應。 – 8ken

+0

甜!如果問題解決了,請確保將答案標記爲已接受的答案,方法是單擊旁邊的複選標記,以便人們知道問題已解決。更多信息:http://meta.stackexchange.com/a/5235/149978 – balupton

+0

完成,再次感謝愛護Docpad。 – 8ken

相關問題