我如何在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