3

マークダウン形式のテキストを取得しました。それをテンプレートに戻して、html として表示できるようにしたいと考えています。このために、Handlebars ヘルパーを定義しました。

Handlebars.registerHelper('markdown_highlight', function (options) {
  var converter = new Showdown.converter();
  var res = '';
  var html =converter.makeHtml(options.fn(this));
  var high = hljs.highlightAuto(html).value;
  res += high;
  return res;
});

結果はフォーマットされた状態で出力されますが、html として直接表示されます。

pre><code> class Foo(object): def __init__(self, i, j): self.i, self.j = i, j def __str__(self): return “(%d, %d)” % (self.i, self.j) def __setitem__(self, idx, v): if idx == 0: self.i = v elif idx == 1: self.j = v else: raise RuntimeError(“Index out of bounds [0,1]”) </code></pre> <p>Make a subclass of Foo, named Bar, that implements the special methods <strong>eq</strong> and <strong>repr</strong>, such that the following code works: </p> <pre><code>&amp;gt;&amp;gt;&amp;gt; f = Bar(1,2)age 3 &amp;gt;&amp;gt;&amp;gt; g = Bar(2,2) &amp;gt;&amp;gt;&amp;gt; f == g False &amp;gt;&amp;gt;&amp;gt; g == eval(repr(g)) True &amp;gt;&amp;gt;&amp;gt; g[0] = 1 &amp;gt;&amp;gt;&amp;gt; f == g True </code></pre>

ヘルパー関数で何が起こっているかはそれほど重要ではありませんが、返された html が html として表示されるようにする方法を誰かが説明してくれるかもしれません。

4

3 に答える 3

3

HTMLがエスケープされていると言っていますか?

その場合は、テンプレートで & の代わりに & を使用{{{}}}{{ください}}。例えば。

{{{markdown_highlight markdown_snippet}}}`

https://stackoverflow.com/a/7173159/236564

于 2012-11-21T21:39:17.207 に答える
1
Template['timeline-item'].rendered = ->
d = @find 'code'
if d
    hljs.highlightBlock d

私はこれらのコードを使用します、これはhljsを機能させることができます。

テンプレートで、テンプレートコンテキストを{{{content}}}でワープします。

于 2012-11-23T02:36:52.747 に答える
1

それ以外の

return res;

試す:

return new Handlebars.SafeString(res);
于 2012-11-22T16:11:26.523 に答える