javascript - Handlebars : How to reuse template after dynamically updating array of objects

标签 javascript dynamic each handlebars.js

好的,这是我正在使用的模板

<script id='goalNavTemplate' type="text/x-handlebars-template">

 {{#each this}}
 <div class="bubble" data-dismiss="modal" data-Name="{{name}}"
 style="background:{{color}} url(images/{{icon}}IconSmall.png) 
 no-repeat 13px 14px;"></div>
 {{/each}}

</script>

然后我将数组中的对象添加到带有 Handlebars 的 DOM 中。

var template = Handlebars.compile($('#goalNavTemplate').html());
$('#selectGoalModal .modal-body').append(template(goals));

这按照我喜欢的方式工作,但接下来我想做的是能够在将新对象添加到数组时(通过用户输入)更新 DOM。但如果我打电话:

$('#selectGoalModal .modal-body').append(template(goals)); 

它再次将所有对象添加到 DOM,而不仅仅是最后一个。我当前的解决方法是删除之前添加的元素,然后在更新数组后使用上面的代码行。我想知道是否有更有效的方法使用 Handlebars 来做到这一点?就像有什么方法可以绕过 #each 并仅附加数组中的最后一个对象吗?你会使用 helper 吗?如果是这样,怎么办?对此的任何见解都会很棒。

最佳答案

您可以向目标项添加一些标志,例如datatime并通过HB检查:

{{#each this.items}}
    {{#ifCond this.dt '>=' ../options.dt }}
        <div class="bubble" id="bub-{{id}}" style="background-color:{{color}};">        
            {{id}} - {{name}}
        </div>
    {{/ifCond}}
    {{#updateDOM "#bub-" id dt}}{{/updateDOM}}
{{/each}}

http://jsfiddle.net/2jvndb0L/5/

关于javascript - Handlebars : How to reuse template after dynamically updating array of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30859383/

相关文章:

Javascript正则表达式 chop 斜杠之间的最后一个参数

grails - Groovy动态对象-如何正确重置属性?

javascript - 字段集的动态命名

javascript - 有什么方法可以在纯 javascript 中将元素作为函数获取?

javascript - 如何打开模态jquery并从表中获取单元格值?

javascript - jQuery 每个函数不使用数组的顺序

javascript - 使用 AngularJS 打开另一个 div 中的内容

javascript - Messenger Extensions Javascript SDK 错误 2071011

Android : How to not overlap dynamic views? + View 的动态位置

javascript - 修改 Angular promise