Руль повторной компиляции шаблонов
Я работаю с рулями, и у меня такая ситуация.
Я делаю запрос к серверу и получаю все данные, которые мне нужны, чтобы поместить их на представления. Я использую руль, чтобы поместить эти данные, и у меня нет проблем.
Теперь мне нужно делать запрос каждые 1 или 2 минуты. Но когда я собираюсь снова поместить данные в представления, возникает ошибка. Это потому, что шаблон, который я уже скомпилировал, и тег, в который будет вставлен шаблон, больше не существует.Какие-нибудь решения? Я оставил свой код здесь:
На мой взгляд, у меня есть следующее:
<script id="vessels-info" type="text/x-handlebars-template">
{{#vessel}}
<div id="content-vessels" class="col-xs-12 col-sm-6">
<div class="page-header">
<h2 id="shipnametitle">{{vesselname}}</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div class="list-group">
<a class="list-group-item">
<b>ID</b>: {{id}}
</a>
<a class="list-group-item">
<b>Posición GPS</b>: ({{lat}} , {{long}})
</a>
<a class="list-group-item {{alertafecha gpsdate}}" >
<b>Fecha GPS</b>: {{gpsdate}}
</a>
<a class="list-group-item {{alertavelocidad speed}}">
<b>Velocidad</b>: {{speed}}
</a>
{{#if rpm}}
<a class="list-group-item">
<b>RPM</b>: {{rpm}}
</a>
<a class="list-group-item {{alertafecha gpsdate}}" class="{{alerta}}">
<b>Fecha RPM</b>: {{rpmdate}}
</a>
{{/if}}
</div>
</div>
</div>
</div>
{{/vessel}}
</script>
И в моем JavaScript, у меня есть это:
function initAlerts() {
try {
getVesselsRequest(alertas, "mapa");
setInterval(initAlerts, 60000);
} catch (err) {
console.log(err);
}
}
function alertas(vessels, mapa) {
var fuente = $('#vessels-info').html();
var plantilla = Handlebars.compile(fuente);
var html = plantilla(vessels);
$('#map-container').html(html);
}
Ошибка такова:
Необнаруженная ошибка: вы должны передать строку или руль AST рулю.компилировать. Вы прошли неопределенный
Я знаю, что ошибка заключается в том, что когда я передаю $('#vessels-info').html();
в функцию компиляции, тег <script>
с идентификатором 'vessels-info' больше не существует, причина уже была скомпилирована.
Какая-нибудь помощь?
1 ответ:
В этом случае вы можете сохранить ссылку на шаблон в виде строки. Что-то вроде:
var templateString = $('#vessels-info').html(); function alertas(vessels, mapa) { var plantilla = Handlebars.compile(templateString); var html = plantilla(vessels); $('#map-container').html(html);
}
Помещать такую переменную в глобальную область-плохая практика. И если ваше приложение усложняется, я бы предложил создать объект, который затем будет содержать состояние и делать периодические обновления.