由于某些库不兼容,我无法在同一个应用程序中同时使用 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>
最佳答案
Heist 故意不在 script 标签内部做拼接替换,因为拼接是在 DOM 元素上完成的,并且 script 标签的内容是纯文本,而不是 DOM。我们这样做是因为如果我们按照您的意愿进行操作,解析器将无法判断“
然而,Heist 和 Pandoc 之间的依赖冲突不应阻止您使用我们内置的 Markdown 拼接。我们实际上并没有链接 Pandoc 库。我们只依赖于 pandoc 可执行程序。因此,要使其工作,您只需从干净的存储库(或使用构建沙箱)构建 pandoc,将 pandoc 二进制文件放在您的路径中,然后从另一个干净的存储库/沙箱构建 Heist。那么你就不必担心任何这些 javascript 的东西。
如果您仍想为此或其他目的使用 javascript,我建议您不要从 Heist 生成 javascript。 Heist 是为 HTML 生成而设计的,而不是 javascript 生成。我更喜欢将我所有的 javascript 放在独立的 .js 文件中。然后,您可以使用 this splice 库中的 snap-extras 方便地加载它们。
要回答您的最后一个问题,您可以使用 renderDiv(this)
调用这样的 div。
关于haskell - 在 javascript 中嵌入 Heist 标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14047248/