3

script type="text/htmlタグにMeteorテンプレートを入力したい。

ですから、これは奇妙なことです、私は知っています。私がこれをやりたい理由の半分は、Cloud9がJSスクリプトタグとHTMLスクリプトタグの違いを認識できないためです。また、タグにHTMLを書き込もうとすると、構文の強調表示とタグの完了が壊れscriptます。私の残りの半分は、これが可能かどうかを知りたいだけです。なぜなら、罪としての醜い回避策が存在するからです。

したがって、この:

<body>
    <script type="text/html" id="test">
        {{> test}}
    </script>
</body>

<template name="test">
    <span>Test</span>
</template>

これを生成します:

<script type="text/html" id="test">
    <!--label:YRgyaMH8-->
</script>

名前をコメントとして評価するように見えるのではなく、テンプレートを強制的にレンダリングする方法はありますか?

4

2 に答える 2

1

別の回答を送信する b/c 記録のために以前の回答を残しておきます。私はこのアプローチがうまくいくと思います。

HTML 内で、2 つのセクションを定義します。1 つ目は、テンプレート コードを配置する場所です。プレーンな div タグ内のコメント内に入ります。2 つ目は、Knockout が使用するテンプレートが配置される場所です。次のようになります。

<template name="koTemplate">
    <div id="myTemplate">
        <span>Here is my template <a href="#">with children</a></span>
    </div>

    <script type="text/html" id="test"></script>
</template>

次に、クライアント JS コードで、テンプレートがレンダリングされたときに実行するコールバックを追加します。

Template.koTemplate.rendered = function () {
  // Get the first node, then get the content inside of it
  var templateHtml = this.firstNode.innerHTML;

  // Remove the element so it doesn't get rendered
  this.firstNode.parentNode.removeChild(this.firstNode);
  // another option is to surround the contents inside the template w/comments, but that loses syntax highlighting

  // Get the target node for placing the template in
  var templateNode = this.lastNode;

  // place the content from the original node to the target node
  templateNode.innerHTML = templateHtml;
};

これは基本的に、テンプレートのコンテンツを取得し、テンプレートを削除してから、スクリプト タグ内に配置します。結果は次のようになります。

<script type="text/html" id="test">
    <span>Here is my template <a href="#">with children</a></span>
</script>
于 2013-02-08T14:06:52.087 に答える
0

script タグの使用をやめて、代わりに Cloud9 が JS として扱わず、Meteor がごまかさない他の一般的なタグを使用することをお勧めします。質問に対する私のコメントの例を使用すると、次のようになります。

<div id="template">
  <!--<span>test</span>-->
</div>

そしてあなたのJSではそれを解析します:

var template = document.getElementById('template').firstChild.nodeValue,
    result = parseTemplate(template, values);

それが基本的な考え方です。結果を取得した後、Knockout のテンプレート解析に変換する必要があります。

于 2013-02-07T23:31:04.810 に答える