3

由于某些库不兼容,我无法在同一个应用程序中同时使用 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>
4

1 回答 1

2

Heist 故意不在脚本标签内进行拼接替换,因为拼接是在 DOM 元素上完成的,并且脚本标签的内容是纯文本,而不是 DOM。我们这样做是因为如果我们按照您的意愿进行操作,解析器将无法判断“<”字符是表示二进制小于运算符还是标记的开头。user1891025 建议生成完整的脚本标签是一种方法。

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

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

要回答您的最后一个问题,您可以使用renderDiv(this).

于 2012-12-27T21:52:24.897 回答