Руль повторной компиляции шаблонов


Я работаю с рулями, и у меня такая ситуация.

Я делаю запрос к серверу и получаю все данные, которые мне нужны, чтобы поместить их на представления. Я использую руль, чтобы поместить эти данные, и у меня нет проблем.

Теперь мне нужно делать запрос каждые 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 2

1 ответ:

В этом случае вы можете сохранить ссылку на шаблон в виде строки. Что-то вроде:

    var templateString = $('#vessels-info').html();


    function alertas(vessels, mapa) {
        var plantilla = Handlebars.compile(templateString);
        var html = plantilla(vessels);
        $('#map-container').html(html);

}

Помещать такую переменную в глобальную область-плохая практика. И если ваше приложение усложняется, я бы предложил создать объект, который затем будет содержать состояние и делать периодические обновления.