Search code examples
meteormeteor-blaze

passing a variable inside helper funtion


I am using a helper inside another helper. I am trying to pass a value ‘post_id’, that i am getting dynamically from ‘show_post’ helper.I want to pass it and then use it inside the query that is returning a set of result back to helper. for some reason , app is crashing. Can someone guide me through this.

{{#each show_post}}
{{posttext}}

{{postedBy}}

    {{#each show_comment({{post_id}}) }}  
    //<--- i am passing the value to helper like this.
    <span> <p>{{postedBy}}: <h5>{{commenttext}}</h5>{{createdAt}}</p></span>                      
    {{/each}}

    {{/each}}
    Template.display_block.helpers({
    show_post(){
    return PostComment.find({parent: 0},{sort: {createdAt: -1}});
    }
    });

Template.display_block.helpers({
show_comment(e){
var t1 = e;
var now = PostComment.find({post_id:{$regex:new RegExp(’^’ + t1)}});
return now;
}
});

The first helper generates a array(Mongo Db result).I want to use this array’s elements(that are dynamic) in next helper. So i want to use a variable that can hold the value of array element of first helper and then pass it to next helper. In second helper, i want to pass this variable and use this variable to sort a result in Mongo query. I am new to this so i am unable to understand how this instance


Solution

  • Firstly you don't need to wrap helper arguments in double curly braces or parens.

    {{#each show_comment post_id}}
    

    Will do what you need.

    You're also making life a bit more complicated for yourself than necessary. You can use the current data context through this in your code. Also unclear why you're using a regex unless you're concatenating something to the post _id.

    This allows you to simplify down to:

    html:

    {{#each show_post}}
      {{posttext}}
      {{postedBy}}
      {{#each show_comment}}
        <span><p>{{postedBy}}: <h5>{{commenttext}}</h5>{{createdAt}}</p></span>                      
      {{/each}}
    {{/each}}
    

    js:

    Template.display_block.helpers({
      show_comment(){
        return PostComment.find({post_id: this._id);
      }
    });