在javascript中嵌入Heist标记

时间:2012-12-26 22:51:02

标签: haskell heist

由于某些库不兼容,我无法在同一个应用程序中同时使用Pandoc和Heist。因此,我决定使用Markdown.JS来处理从客户端浏览器中将Markdown格式数据转换为HTML的过程。从长远来看,这可能有一些额外的好处,但在短期内,这只是因为Pandoc依赖于Blaze-HTML 0.4而Heist依赖于Blaze-HTML 0.5。

因此,在类似博客的应用程序中,我有一个用于填写每个条目的模板,但是每个条目的内容需要在加载页面后转换为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>

再次,它逐字呈现。

如何说服Heist在javascript里面的entryDate中拼接?

或者,我正在使用Prototype.JS作为Javascript库。有没有办法让我把脚本放在div中并基本上用“self”调用脚本?

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

1 个答案:

答案 0 :(得分:2)

Heist故意不在脚本标记内进行拼接替换,因为拼接是在DOM元素上完成的,而脚本标记的内容是纯文本,而不是DOM。我们这样做是因为如果我们做了你想做的事,解析器将无法判断是否'&lt;'字符表示二进制小于运算符,或标记的开头。 user1891025建议生成完整的脚本标记是一种方法。

然而,Heist和Pandoc之间的依赖冲突不应该阻止您使用我们的内置降价拼接。我们实际上并没有链接Pandoc库。我们只依赖于pandoc可执行程序。因此,要使其工作所需要做的就是从干净的存储库构建pandoc(或使用构建沙箱),将pandoc二进制文件放在路径中,然后从另一个干净的存储库/沙箱构建Heist。然后你就不用担心这些javascript的东西了。

如果您仍想使用javascript或其他内容,我建议您不要从Heist生成javascript。 Heist是为HTML生成而设计的,而不是javascript生成。我更喜欢把我所有的javascript放在独立的.js文件中。然后,您可以使用this splice库中的snap-extras方便地加载它们。

要回答您的上一个问题,您可以使用renderDiv(this)调用这样的div。