Próbuję dynamicznie dostać i ustawić pagetitle dla mojej przykładowej aplikacji Meteor, idealnie chciałbym użyć jQuery, ale każdy inny rozwiązanie też byłby dobry.

Próbuję to zrobić w trudnej sytuacji, ustawiając sesję, gdy na stronie istnieje pewna klasa div, ale nie działa z jakiegoś powodu.

Zasadniczo mam to:

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

I chcę coś zrobić

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

Jakikolwiek pomysł, jak zrobić tę pracę? dzięki!

1
akmur 16 sierpień 2014, 17:47

2 odpowiedzi

Najlepsza odpowiedź

Musisz to zadzwonić do kontrolera lub szablony renderowaną sekcję tak, jak:

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);
  }
}
4
SkinnyGeek1010 16 sierpień 2014, 14:34

Jak wskazał @Kuba Wyrobek, musiałem użyć funkcji szablonu.layout.Rendered.

Oto fragment, który pracuje

Template.postsList.rendered = function(){
    Session.set('pageTitle', 'Listing Page')
};
0
akmur 16 sierpień 2014, 14:29