我有一个场景,我试图创建一个查看数组长度的自定义手柄帮助器,如果该数组中有三个以上的对象,只返回前三个元素,但如果不是,然后返回全额。下面是我尝试这样做,当我传入limitAmount
的值时,我正在返回适量的对象,但返回的值是[object SequelizeInstance:blog_comment]
,表示对象的数量是[object SequelizeInstance:blog_comment],[object SequelizeInstance:blog_comment],[object SequelizeInstance:blog_comment]
当下。这不是我想要的,我现在想知道是否应该涉及一个for循环来传回对象的值。这是用for循环简单解决的吗?
出现的详细示例:
blog_comments: [
{
commentId: 1,
comment: 'Test',
userId: 2},
{
commentId:2,
comment: '2nd Test',
userId: 1
}]
对象结构示例:
hbs.registerHelper('commentLimit', function(comment, limitAmount, options){
if(comment.length > limitAmount){
return comment.slice(0,limitAmount);
} else {
return comment;
}
})
注册车把:
{{#commentLimit blog_comments 2}}
{{#ifeq userId @root.user.userId}}
<a href="#" class="comment-delete" data-comment-id="{{commentId}}">Delete</a></p>
{{/ifeq}}
<p class="blog-comment">{{comment}}</p>
{{/commentLimit}}
在模板中使用
java -cp `hbase classpath`:./lab-exercises-shopping-1.0.jar shopping.ShoppingCartApp setup
答案 0 :(得分:1)
解决方案1。是的。你需要在帮助器中使用for循环,
hbs.registerHelper('commentLimit', function(comment, limitAmount, options) {
let res = comment;
if (comment.length > limitAmount) {
res = comment.slice(0, limitAmount);
}
let out ='';
for (var i = 0; i < res.length; i++) {
out = out + options.fn(res[i]);
}
return out;
})
解决方案2. 您可以使用内置each
帮助程序进行迭代
{{#each (commentLimit blog_comments 2)}}
{{#ifeq userId @root.user.userId}}
<a href="#" class="comment-delete" data-comment-id="{{commentId}}">Delete</a></p>
{{/ifeq}}
<p class="blog-comment">{{comment}}</p>
{{/each}}
commentLimit
助手和你一样。
hbs.registerHelper('commentLimit', function(comment, limitAmount, options){
if(comment.length > limitAmount){
return comment.slice(0,limitAmount);
} else {
return comment;
}
})
答案 1 :(得分:0)
@kumkanillam提供的精炼答案:
Handlebars.registerHelper('commentLimit', function (comment, limitAmount, options){
var commentList = comment.slice(0, limitAmount + 1);
return commentList.reduce(function(results, comment) {
return results + options.fn(comment);
}, '');
});
这个想法是返回每次迭代结果的串联。 'reduce'函数可以很好地处理这个任务。
您可以考虑选项调用:
options.fn(comment)
在{{#commentLimit ...}}和{{/ commentLimit}}之间运行代码块,上下文是参数提供的值(在这种情况下,blog_comments中的一个条目' )。