underscore js:更智能的列表渲染与每个或替代

Posted

技术标签:

【中文标题】underscore js:更智能的列表渲染与每个或替代【英文标题】:underscorejs: smarter list rendering with _each or an alternative 【发布时间】:2016-08-16 23:47:31 【问题描述】:

我想使用underscorejs 渲染模板。

这段代码

var _ = require('underscore');
var tpl = 'Hello <% _.each(names, function(name)  %><%= name %>, <% ); %>!';
var compiled = _.template(tpl);
var data = 
  names: ['Marissa','Bill','Larry','Steve']
;
var result = compiled(data);

产生:

=> "Hello Marissa, Bill, Larry, Steve, !"

好吧,结果看起来并不聪明。

如果name不是最后一项,我需要请求,然后输出“,”,这样我就可以得到结果:

"Hello Marissa, Bill, Larry, Steve!"

如果我可以查询名字是否是最后一个之前的名字,我可以得到:

"Hello Marissa, Bill, Larry and Steve!"

我怎样才能得到这个结果?

【问题讨论】:

【参考方案1】:

我解决了:

 Hello <% var n=names.length-1; _.each(names, function(name,i)  %><%= name %><% if(i<n) %>, <% ); %>!

结果

=> "Hello Marissa, Bill, Larry, Steve!"

Hello <% var n=names.length-2; _.each(names, function(name,i)  %><%= name %><% if(i<n) %>, <% if(i==n) %> and <% ); %>!

结果

=> "Hello Marissa, Bill, Larry and Steve!"

【讨论】:

以上是关于underscore js:更智能的列表渲染与每个或替代的主要内容,如果未能解决你的问题,请参考以下文章

Underscore.js:使用在对象中找到的键从对象列表中创建映射

如何使用underscore.js在列表元素中过滤具有匹配参数的对象?

巧用underscore.js处理复杂的json

Underscore.js 的模板功能介绍与应用

backbone 唯一依赖库Underscore.js

渲染 Backbone.js 集合