我如何在jsrender中避免使用相同的元素?

美好的一天,为jsrender提供课程{{for}}的数组

[{ "name": "Pete", "address": { "city": "Seattle" } }, { "name": "Heidi", "address": { "city": "Sidney" } }, { "name": "Semen", "address": { "city": "Sidney" } }] 

和模板。

 {{for address}}{{>city}}{{/for}} 

渲染此模板将返回该数据

 Seattle Sidney Sidney 

在使用{{for}} ,我可以以某种方式避免重复使用相同的元素,即仅显示:

 Seattle Sidney 

我不熟悉jsrender。 但是快速搜索让我进入了这个问题及其解决方案 。

所以,对于这个特殊的问题,你可以通过重写它来满足你的要求,

 {{for address}} {{if ~domTextExists(text)}} {{>city}} {{/if}} {{/for}} 

而且,对于帮手,

 $.views.helpers({ domTextExists: function( text ) { return $("#yourParentDIV:contains('"+text+"')").length; } }); 

查看JsRender Helper了解更多详情。

BTW而不是写作

{{for address}}{{>city}}{{/for}}

你可以通过写作来简化

{{>address.city}}

消除重复:

您可以在将数组传递给JsRender之前对其进行过滤。

如果您不想这样做,可以使用帮助器来排除重复项,但是帮助程序需要查看数组中的先前项,而不是DOM,因为JsRender中的呈现是在插入之前发生的。 DOM。

这是一个版本:

模板:

 {{if !~alreadyInList(#index, address.city)}} {{>address.city}} {{/if}} 

使用Javascript:

 var items = [...], html = tmpl.render(items, { alreadyInList: function(index, city) { for (var i=0; i