简体   繁体   中英

Session Set and Get in Meteor

I am trying to dynamically get and set a pageTitle for my sample Meteor app, ideally I'd like to use jQuery, but any other solution would be good too.

I am trying to do it the rough way by setting a session when a certain div class exists on the page, but it's not working for some reason.

Basically, I have this:

Template.layout.helpers({
  pageTitle: function() { return Session.get('pageTitle'); }
});

And I want to do something like

if ($('section').hasClass('single')) {
    Session.set('pageTitle', 'Post Page');
}

Any idea ho to make this work? thanks!

You need to call it in a controller or the templates rendered section like this:

Template.layout.helpers({
  pageTitle: function() {
    return Session.get('pageTitle'); 
  }
});


// set when a page template renders
Template.posts.rendered = function() {
  setPageTitle("Blog Posts");
};


// or with Iron Router on *every* route using some sort of variable
Router.onBeforeAction(function() {
  var someDynamicValue = "FOO";
  setPageTitle(someDynamicValue);
});


// or in an IronRouter Controller
PostsController = RouteController.extend({
  onBeforeAction: function() {
    setPageTitle("Blog Posts");
  }
});


// helper function to set page title. puts a prefix in front of page, you
// could opt set a boolean to override that
function setPageTitle(titleName) {
  var prefix = "My Site - ";

  if ($('section').hasClass('single')) {
    Session.set('pageTitle', prefix + titleName);
  }
}

As @Kuba Wyrobek pointed out, I needed to use the Template.layout.rendered function.

Here's a snippet that works

Template.postsList.rendered = function(){
    Session.set('pageTitle', 'Listing Page')
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM