2012-12-26 30 views
3

由於某些庫不兼容,我無法在同一應用程序中同時使用Pandoc和Heist。因此,我決定用Markdown.JS來處理在客戶端瀏覽器中從Markdown格式數據轉換爲HTML格式。從長遠來看,這可能會帶來一些額外的好處,但從短期來看,僅僅因爲Pandoc依賴於Blaze-HTML 0.4而Heist依賴於Blaze-HTML 0.5。在javascript中嵌入海斯特標籤

因此,在類似博客的應用程序中,我有一個用於填寫每個條目的模板,但是每個條目的內容需要在頁面加載後轉換爲HTML。所以,我創建了一個模板,看起來像這樣:

<h2> <a href="wiki/${target}"><entryTitle /></a> </h2> 
<p class="entryDate"> <entryDate /> </p> 
<div id="body_${entryDate}"> 
<entryBody /> 
</div> 

<script type="text/javascript"> 
renderDiv("body_" + <entryDate />) 
</script> 

不幸的是,renderDiv呼叫最終呈現這樣的:

<script type='text/javascript'> 
renderDiv("body_" + <entryDate />) 
</script> 

我已經使用字符串嵌入形式(像我一樣的也試過模板中的div ID):

<script type="text/javascript"> 
renderDiv("body_${entryDate}") 
</script> 

再一次,它呈現逐字。

我該如何說服海斯特在javascript的entryDate中拼接?

或者,我使用Prototype.JS作爲Javascript庫。有沒有辦法讓我把腳本放到div裏面,然後基本上用「self」來調用腳本?

<div id="body_${entryDate}"> 
<entryBody /> 
<script type="text/javascript"> 
renderDiv($(self)) 
</script> 
</div> 

回答

2

搶劫故意沒有做腳本標記內拼接替代,因爲剪接的DOM元素完成,腳本標籤的內容是純文本,而不是一個DOM。我們這樣做是因爲如果我們做了你想要的,解析器將無法判斷'<'字符是否表示二進制小於運算符或標記的開始。 user1891025提供的生成完整腳本標記的建議是實現它的一種方法。

但是,Heist和Pandoc之間的依賴衝突不應阻止您使用我們的內置降價拼接。我們實際上並沒有鏈接Pandoc庫。我們只依賴於pandoc可執行程序。因此,您只需從乾淨的存儲庫(或使用構建沙箱)構建pandoc,將pandoc二進制文件放入路徑中,然後從另一個乾淨的存儲庫/沙箱構建Heist即可。那麼你將不必擔心任何這種JavaScript的東西。

如果你仍然想要使用JavaScript或其他東西,我會建議你不要從海斯特生成JavaScript。海斯特是爲HTML生成而設計的,而不是生成JavaScript。我更願意將所有的javascript放在獨立的.js文件中。然後,您可以使用snap-extras庫中的this splice來方便地加載它們。

要回答你最後一個問題,你可以撥打renderDiv(this)這樣的格。

+0

謝謝。我試圖直接使用pandocBS,因爲我從另一個文件加載Markdown內容並將格式化版本放入模板中。 markdownSplice似乎要求降價內容已經在我的模板中,而事實並非如此。 Text.XML.Expat.Tree.parse'似乎沒有產生一個容易轉換成Text.XmlHtml的XML節點。所以,我直接使用Text.XmlHtml.parseXML,但在pandocBS中生成字體代碼的「印刷正確」標誌時遇到了問題,這是我無法處理的。 –

+0

不,降價拼接不需要。以下是我們如何在Snap網站中使用它。 https://開頭github上。com/snapframework/snap-website/blob/master/snaplets/heist/templates/faq.tpl – mightybyte

+0

@mightybyte,你會如何推薦在這個問題中爲示例生成javascript?我有一個類似的問題,我想設置一個環境變量來區分生產和開發,並且JS渲染需要使用它。 – jvans