2013-09-24 2 views
2

Так что, если у меня есть шаблон:Meteor.js: как передать контекст данных одного помощника другому помощнику?

<template name="myTemplate"> 
    {{foo}} 
</template> 

и вспомогательный шаблон:

Template.myTemplate.foo = function() { 
    blah = Session.get('blah'); 
    // code to do stuff with blah 
    return blah; 
}; 

, а затем у меня есть еще один шаблон:

<template name="myOtherTemplate"> 
    {{foo}} 
</template> 

и я хочу контекст данных этого шаблон должен быть таким же, как предыдущий шаблон, что бы я сделал?

Сначала мне пришло в голову, что использование {{#with}} может быть правильным, но похоже, что это будет работать только в том случае, если область действия второго шаблона уже находится внутри первого.

В конечном счете, я хотел бы иметь возможность использовать все помощники, определенные для одного шаблона в другом шаблоне, и знать, как это сделать.

ответ

3

Похоже, вы задаете один из двух вопросов:

  1. Если вы используете myOtherTemplate внутри myTemplate, контекст другого шаблона будет таким же, как этот, если вы явно не передать ему что-то другое как второй аргумент частичного.

    <template name="myTemplate"> 
        {{> myOtherTemplate foo}} 
    </template> 
    
  2. Если вы хотите использовать помощника в более чем один шаблон, объявить его в глобальном помощника. Это позволит сделать {{foo}} доступны во всех шаблонах:

    Handlebars.registerHelper("foo", function() { 
        blah = Session.get('blah'); 
        // code to do stuff with blah 
        return blah; 
    }); 
    
  3. Если вы хотите сделать свой собственный контекст данных на лету (это бывает редко), сделайте следующее:

    <template name="myTemplate"> 
        {{{customRender}}} 
    </template> 
    
    Template.myTemplate.customRender = function() { 
        return Template.otherTemplate({ 
         foo: something, 
         bar: somethingElse, 
         foobar: Template.myTemplate.foo // Pass in the helper with a different name 
        }); 
    }; 
    

    Этот объект является в основном что Iron-Router перейдет к вашему шаблону при рендеринге. Обратите внимание, что вам необходимо использовать тройные рули {{{ }}} или использовать new Handlebars.SafeString, чтобы сообщить об этом, чтобы избежать шаблона.

+0

Ваш ответ на 100% правильный, но моя формулировка была плохая и ее не совсем то, что я ищу. Я не знаю, использовали ли вы железный маршрутизатор, но одна из вещей, которую вы можете сделать, это передать контекст данных через данные: ... Я хочу передать контекст данных основного шаблона в шаблон заголовка. Есть ли способ получить все помощники, связанные с одним шаблоном, в один объект и передать это? Может быть, данные: Template.myTemplate.helpers() или что-то в этом роде. (Я дам вам ответ в любом случае, просто любопытно в основном) – funkyeah

+0

Контекст данных не совпадает с шаблонами. Вы должны собрать помощников вручную, если хотите их использовать, потому что у 'Template.myTemplate' есть куча других прикрепленных к нему материалов, которые вы не хотите передавать. Вы можете передать как помощники, так и данные как объект с любым вы хотите, хотя будьте осторожны, чтобы не смутить себя. –

Смежные вопросы