使用Mustache js更新模板

时间:2019-02-14 13:00:21

标签: javascript mustache

我正在使用mustache js从API数据渲染模板,效果很好,但是我需要在一段时间后更新(重新渲染)相同的模板。就我而言,我在模板中有一个这样的列表:

template.html

<div id="template">
  {{#list}}
    <span>{{firstName}} {{lastName}} - {{phone}}</span>
  {{/list}}
</div>

index.js

$(document).ready(function(){

  $.ajax(
    //some ajax here
  ).done(function(response){
    loadTemplate(response);
  });

});

function loadTemplate(data){
  var template = $("#template").html();
  Mustache.parse(template);
  var render = Mustache.to_html(template, data);
  $("#template").empty().html(render);
};

但是用户可以在此列表中添加更多元素,然后,我需要更新胡须模板。我尝试调用Ajax(将具有新值的响应添加到列表中),然后再次调用loadTemplate函数,但不起作用,列表不会更改(更新)新值。

1 个答案:

答案 0 :(得分:1)

第一次渲染模板时,原始的胡子模板会丢失。 呈现的文本位于相同的位置。因此,第二次尝试重新渲染模板时,没有模板可以仅渲染不再是模板的文本,因此仅再次输出文本。

解决方案是将原始模板存储在另一个位置(例如,在带有id=#originalTemplate的元素中)。

然后执行以下操作:

function loadTemplate(data){
  var template = $("#originalTemplate").html(); // NOTE we use original template which does not get overriden
  Mustache.parse(template);
  var render = Mustache.to_html(template, data);
  $("#template").empty().html(render);
};