私は、配列の長さを調べるカスタムハンドルバーヘルパーを作成しようとしていますが、3つ以上のオブジェクトがその配列内に存在する場合は最初の3つの要素を返しますそうでない場合は、全額を返却してください。以下は私がこのようなことをしようとしたところで、limitAmount
の値を渡すと適切な量のオブジェクトが戻ってきますが、返される値は存在するオブジェクトの量に対して[object SequelizeInstance:blog_comment]
です。これは私が探していたものではありません、私は今forループがオブジェクトの値を返す必要があるかどうか疑問に思っています。これはforループで単純に解決されますか?ハンドルバーの配列長条件付きヘルパー
表示されているものの具体例:
[object SequelizeInstance:blog_comment],[object SequelizeInstance:blog_comment],[object SequelizeInstance:blog_comment]
オブジェクト構造例:
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}}
あなたの答えに感謝します。非常に役に立ちましたが、上記のループを使用する際に問題が見つかりました。あなたのヘルパーの変更に従って、 '{{#commentLimit blog_comments 2}} {{/ commentLimit}}'を使うと、適切な2レコードの制限が得られますが、最初の2つのレコードではなく、同じレコードに対して2回繰り返します。 '{{#each(commentLimit blog_comments 2)}} {{/ each}}' 'options.fnは関数ではありません。 if文を '{{#each(commentLimit blog_comments 2)}}'と使うだけで、適切な出力が得られます。最初の2回の試行で問題が発生した理由は何ですか? – cphill
申し訳ありません。最初のオプションは 'res [0]'をヘルパーの 'res [i]'に置き換えてください。そして、元のヘルパーで十分です2番目のソリューション – kumkanillam