6
OK。私のHTMLは以下のように見えます。Handlebar.jsがテンプレートをリフレッシュしない
<div id="json"></div>
<div id="content-placeholder">
<script id="some-template" type="text/x-handlebars-template">
<table>
<thead>
<th>col 1</th>
<th>col 2</th>
</thead>
<tbody>
{{#results}}
<tr>
<td>{{col_1}}</td>
<td>{{col_2}}</td>
</tr>
{{/results}}
</tbody>
</table>
</script>
</div>
私はHandlebar.js経由で上記のデータを入力しており、データはサーバーから受信されます。ここにコードがあります。
$.get(get_data_url, function(data)
{
$('#json').empty().append(data);
var rows = eval('(' + data + ')');
var source = $("#some-template").html();
var template = Handlebars.compile(source);
$("#content-placeholder").empty().append(template(rows));
});
初めてコードを実行すると、正常に表示されます。しかし、私が$ .getを2回目などと呼び出すと、テンプレートは新しいデータでリフレッシュされません。
また、データ・ストリング全体を印刷して、サーバーからデータがリフレッシュされていることを確認します。
Chromeをチェックすると、「Uncaught TypeError:nullのメソッド 'match'を呼び出すことができません」というメッセージが表示されます。
"コンパイル"と関係がありますか?
oh man。私は道具です。ご協力いただきありがとうございます。 :) – ericbae
または、このブロックを移動することもできます。 'var source = $("#some-template ").html();' 'varテンプレート= Handlebars.compile(ソース);'。 get() 'コールバックなので、テンプレートを取り出して一度コンパイルするだけで、リソース/スピードを節約できます。 –
@ GarciaWebDev:うん、それは良い点です。私は通常、最初の使用時にコンパイルとキャッシングを扱う単純なテンプレートマネージャの中にすべてを埋め込みます。しかし、私はまだテンプレートとコンテンツを混ぜないことをお勧めします。 –