把手阵列长度条件助手

时间:2017-01-16 23:08:12

标签: javascript arrays handlebars.js

我有一个场景,我试图创建一个查看数组长度的自定义手柄帮助器,如果该数组中有三个以上的对象,只返回前三个元素,但如果不是,然后返回全额。下面是我尝试这样做,当我传入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

2 个答案:

答案 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中的一个条目' )。