Meteor passing value into helper function(Blaze and meteor)


#1

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;
}
});

thanks in advance for those who is going to give any effort to this.


#2

Have you tried

<template name="post">
 {{#each posts}}
   {{#each show_comment}}
    <span> <p>{{postedBy}}: <h5>{{commenttext}}</h5>{{createdAt}}</p></span>                      
   {{/each}}
 {{/each}}
</template>

where

Template.post.onCreated(function(){
	var instance = this;
	instance.posts = {
		'one':{
			comments: [
				{postedBy: 'xxx', commenttext: 'xxx', createdAt: 'xxx'},
				{postedBy: 'yyy', commenttext: 'yyy', createdAt: 'yyy'},
				{postedBy: 'zzz', commenttext: 'zzz', createdAt: 'zzz'},
			]
		},
		'two': {
			comments: [
				{postedBy: 'aaa', commenttext: 'aaa', createdAt: 'aaa'},
				{postedBy: 'bbb', commenttext: 'bbb', createdAt: 'bbb'},
				{postedBy: 'ccc', commenttext: 'ccc', createdAt: 'ccc'},
			],
		}
	}
});
Template.post.helpers({
	posts(){
		var posts = Template.instance().posts;
		return Object.keys(posts).map(function(p){ return {post_id: p}});
	},
	show_comments() {
                // 'this' is the context from the outer #each
		var posts = Template.instance().posts;
		return posts[this.post_id].comments;
	},
});


#3

Let me address the issue again. 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 concept works.


#4

You don’t really need a variable to hold the result, you can just pass a Mongo collection cursor to #each, like this (assuming your posts are in PostsMongoCollection and your comments in CommentsMongoCollection.

Template.post.helpers({
	posts(){
		return PostsMongoCollection.find({},{sort:{postedBy:1}});
	},
	show_comments() {
		return CommentsMongoCollection.find({post_id: this.post_id});
	},
});

#5

thanks a lot . this worked for me. i am great-full for your response.


#6

To be complete, it is possible to do what you wanted. The syntax is here.

In your case use:

{{#each (show_comment post_id)) }} ...

#7

Thanks for your response.This syntax is also working.