4

これらの 2 つのブログ投稿に触発された後、jQuery テンプレートを試してみたかった

まあ、それは私にとってはうまくいきません。ページ自体にテンプレート コードがある場合は正常に動作しますが、リモートでの読み込みはうまくいきません。テンプレートは正常に取得されているようです。ここで何が問題なのですか?

外部テンプレート:

<script id="contactsTemplate" type="text/x-jquery-tmpl">
  <table class="contacts">
    <thead><tr><td class="ui-helper-hidden">Id</td><td>Name</td><td>City</td><td>State</td></tr></thead>
    <tbody>
    {{each contact}}
        {{tmpl($value) '#contactTemplate'}}
    {{/each}}
    </tbody>
  </table>
</script>

<script id="contactTemplate" type="text/x-jquery-tmpl">
    <tr><td class="ui-helper-hidden">${id}</td><td>${name}</td><td>${city}</td><td>${state}</td></tr>
</script>

私のページでは、このコードを使用してテンプレートを取得してロードしています。

var contacts = {
    contact: [
        { id: 1, name: "John Green", city: "Orange Beach", state: "AL" },
        { id: 2, name: "Sam Thompson", city: "Pensacola", state: "FL" },
        { id: 3, name: "Mary Stein", city: "Mobile", state: "AL" }
    ]
};

$("#ShowDataRemote").button().click(function() {
    $.get('templates/Contact.htm', function(template) {
        alert(template);
        $.tmpl(template, contacts).appendTo("body");
        alert("async done");
    });
});

アップデート:

Encosia に関する新しいブログ投稿では、この質問と回答について説明しています...

http://encosia.com/2010/12/02/jquery-templates-composite-rendering-and-remote-loading/

4

2 に答える 2

3

ロードしている文字列自体が有効なテンプレートではないため、この単純なリモート ロード手法は複合テンプレートでは機能しません。次のようにクリックハンドラーを変更することで、機能させることができます。

$("#ShowDataRemote").button().click(function() {
  $.get('templates/Contact.htm', function(template) {
    // Inject the template script blocks into the page.
    $('body').append(template);

    // Use those templates to render the data.
    $('#contactsTemplate').tmpl(contacts).appendTo("body");
  });
});
于 2010-11-30T16:26:07.150 に答える
0

次のリファレンスのように、テンプレート文字列を「名前付きテンプレート」としてコンパイルできます:https ://stackoverflow.com/a/4366280/1274343

于 2012-10-16T13:45:55.907 に答える