2015-07-10 4 views
0

Интересно, есть ли какая-нибудь функция, чтобы проверить, не указан ли конкретный шаблон на странице. Например я следующее:Meteor - {{#if template}} is current

  • -header
  • -yield
  • --postPage
  • --many другие

И когда postPage открыт я хочу, чтобы отобразить ссылку в шаблон заголовка. Возможно, что-то похожее на {{#if currentUser}} button {{if /}}

ответ

1

Я не уверен, есть ли способ увидеть все обрабатываемые в настоящее время шаблоны, предположительно существует, по крайней мере, частный API для это, но вы можете сделать:

displayLinks = new ReactiveVar(false); 

Template.postPage.onRendered(function() { 
    displayLinks.set(true); 
}); 

Template.postPage.onDestroyed(function() { 
    displayLinks.set(false); 
}); 

Template.header.helpers({ 
    displayLinks: function() { 
    return displayLinks.get(); 
    } 
}); 

в основном вы настраиваете реактивную переменную верно, когда отображается postPage и ложным, когда он снят с DOM. Затем {{#if displayLinks}} ... {{/ if}} в вашем заголовке.

Вы должны

meteor add reactive-var 

, если вы еще не использовать их.

+0

не так лучше хранить эту переменную в сеансе? –

+0

Переменные сеанса @KimRis не рекомендуются там, где это возможно, поскольку их можно легко найти и обработать на клиентском сеансе. Кроме того, они будут сохраняться между разными страницами вашего приложения, тогда как переменная сеанса при привязке к контексту данных шаблона не будет –

1

Я хотел добавить к ответу шамблей. (Большой ответ BTW)

Если у вас есть много шаблонов хотят хотят знать, какие из них отображаются без, реализующий onRendered/onDestroyed для каждого шаблона, вы можете это сделать, используя следующий код:

displayLinks = new ReactiveVar(false); 

_.each(["header", "yield", "postPage", "etc"], function(t) { 
    Template[t].onRendered(function() { 
    displayLinks[t].set(true); 
    }); 

    Template[t].onDestroyed(function() { 
    displayLinks[t].set(false); 
    }); 
});