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 두 번째 시간 (등)을 호출하면 템플릿이 새 데이터로 새로 고쳐지지 않습니다.
또한 전체 데이터 문자열을 인쇄하여 데이터가 서버에서 새로 고쳐지고 있는지 확인합니다.
Chrome에서 확인하면 'Uncaught TypeError :'null '중'match '메서드를 호출 할 수 없음을 알립니다.
"컴파일"과 관련이 있습니까?
oh man. 나는 도구 야. 당신의 도움을 주셔서 감사합니다. :) – ericbae
또는이 블록을 옮길 수 있습니다 : 'var source = $ ("# some-template") .html();' 'var template = Handlebars.compile (source);'. get()'콜백을 사용하면 템플릿을 가져 와서 한 번 컴파일하여 리소스/속도를 절약 할 수 있습니다. –
@ GarciaWebDev : 예, 좋은 지적입니다. 평소에 컴파일 및 캐싱을 다루는 간단한 템플릿 관리자에이 모든 것을 묻습니다. 그러나 나는 여전히 템플릿과 내용을 혼합하지 않는 것이 좋습니다. –