2015-02-17 2 views
0

Давайте предположим, что у меня есть на страницы, которые содержат один и тот же вложенный шаблон:Как получить данные «корень» в шаблоне или шаблона помощника Blaze

Page1:

>rootTeplate 
    >fooTemplate 
    >barTemplate 

PAGE2:

>rootTeplate 
    >barTemplate 

Как написать помощник шаблона, который позволяет мне получить доступ к данным rootTemplate в barTemplate? Я знаю, что могу получить доступ к родительскому контексту с помощью ../, но в этом случае barTemplate не знает, сколько уровней ему нужно вернуться.

ответ

1

Вам нужно быть уверенным, сколько уровней вы хотите вернуться. В качестве помощника в barTemplate вы можете использовать Template.parentData

т.е.

Template.barTemplate.helpers({ 
    something: function() { 
     var parentDatas = Template.parentData() 

     //If there are two levels 
     var parentDatas = Template.parentData(2) 
    } 
}); 

Вы должны быть уверены в том, сколько уровней вы хотите, чтобы получить доступ к, и вы можете подключить этот номер в Template.parentData.

Если вы не уверены в том, сколько уровней необходимо вернуть, возможно, не стоит использовать эту парадигму. Рассмотрите возможность использования контекста data с маршрутизатора или вместо хэша Session.

+0

Контекст данных маршрутизатора - это то, что я ищу. Как я могу получить доступ к нему внутри вспомогательной функции шаблона без знания корневого шаблона? – MarcS82

+0

@ MarcS82 Используйте параметр 'data', чтобы установить его (https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#setting-region-data-contexts) и получить доступ к нему в помощниках используя 'this' – Akshat

+0

@ MarcS82 Вот пример, который показывает это: https://gist.github.com/Tarang/847a23b84bc61697e504 – Akshat

1

В этом случае вы можете получить доступ к контексту данных с iron: router с помощью Router.current(). Data().

Template.barTemplate.helpers({ 
    var data = Router.current() && Router.current().data(); 
    if(data) 
    // use it 
Смежные вопросы