把手重新编译模板

时间:2015-02-17 13:50:01

标签: javascript handlebars.js

我正在使用把手,我有这种情况。

我向服务器发出请求,并获取将其放在视图上所需的所有数据。我使用把手来放置数据,没有问题。

现在,我需要每隔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);
}

错误是这样的:

  

未捕获错误:您必须将字符串或Handlebars AST传递给Handlebars.compile。你通过了未定义的

我知道错误是当我将$('#vessels-info').html();传递给编译函数时,标识为{vessel-info'的标记<script>不再存在,原因已经编译。

任何帮助?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以将模板的引用保持为字符串。类似的东西:

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


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

}

将这样的变量放在全局范围内是不好的做法。如果你的应用程序变得越来越复杂,我建议创建一个对象,然后保存状态并进行定期更新。