Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

meteor,Dynamically change template helper data

Tags:

meteor

I have a small doubt,Is it possible to change the template helper data dynamically.

Here is my template

{{#each post}}
<h4>{{postyname}}</h4>
<h4>{{Headline}}</h4>
<h4>{{Location}}</h4>
{{/each}}

and this is my helper data

post:function()
{
    posts.find({},{sort: {createdAt: -1}}).fetch();
}

and it is displaying results in my homepage and i have search bar at the top of this page and whenever user clicks search button the same template must be render but with different data depend on user search.

I've tried like this on my onclick event,looks like it is not working

'onclick #searchBtn':function()
{
    var all_posts=posts.find({'Headline': search},{sort: {createdAt: -1}}).fetch();

    Template.postDisplay.post=function(){

    return all_posts;
}

How to do this?

like image 359
Sasikanth Avatar asked Dec 29 '25 17:12

Sasikanth


2 Answers

I believe using Dep Dependency is what you want to use:

Create a variable on the top of your js file

var _deps = new Tracker.Dependency;
var searchCriteria = {};

In your helper:

post:function() {
    _deps.depend(); // creates a dependency between the accessor of "post" and the _deps
    posts.find(searchCriteria,{sort: {createdAt: -1}}).fetch();
}

On your button click:

'onclick #searchBtn':function() {
    searchCriteria = {'Headline': search};
    _deps.changed(); // notifying everyone that is dependent on _deps that it has changes
}

Based on what I see from your question I believe this should handle your situation. Let me know if I misunderstood something in your problem.

like image 95
Firo Avatar answered Dec 31 '25 17:12

Firo


Why not just use a Session variable? They are reactive, just what you need.

Instead of manually handling a dependency, using Session.set and Session.get will register and fire dependencies automatically..

post:function()
{
    var searchCriteria = Session.get("searchCriteria") || {};
    posts.find(searchCriteria,{sort: {createdAt: -1}}).fetch();
}

'onclick #searchBtn':function()
{
    Session.set("searchCriteria", {'Headline': search});
}

The Session variable would also be preserved after a hot code reload. A variable would not.

like image 23
olivermaldonado Avatar answered Dec 31 '25 19:12

olivermaldonado



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!