2012-12-26 31 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