2014-10-24 8 views
2

Я довольно новичок в Метеор и нуждаюсь в некоторой помощи.Обновление динамического шаблона родительского шаблона из дочернего шаблона

У меня есть внешний родительский шаблон, содержащий боковое меню слайдов. Это боковое меню слайдов включает в себя новый Blaze Dynamic Template.

<div id="parentTemplate"> 

    {{>yield}} 

    <div class="right-slide-menu"> 

     {{> UI.dynamic template=rightSideMenu}} 

    </div> 

</div> 

Так, так как я использую Iron-маршрутизатор, когда новый дочерний шаблон получает впрыскивается в «выход» из железа маршрутизатора меню с правой стороны должен меняться в зависимости от того, какой «странице» это сейчас. Я пытаюсь выяснить, как обновить родительское меню слайдов динамического шаблона из дочернего шаблона. Я могу сделать это довольно легко с помощью Angular ... но я не могу показаться, что это можно использовать с помощью Meteor.

Любая помощь была бы действительно оценена!

+1

Обратите внимание, что по состоянию на 0.9.4, UI.dynamic был заменен [ '{{> Template.dynamic}}'] (http://docs.meteor.com/ #template_dynamic). –

+0

Как насчет использования Iron Router [регионов] (http://eventedmind.github.io/iron-router/#rendering-templates-into-regions-with-javascript)? – Sacha

+0

Спасибо Sacha, я никогда не слышал о них раньше. Я посмотрю. Спасибо за предложение! – cpeele00

ответ

4

Хорошо, я действительно получил это, чтобы работать. Я нашел решение на этом блоге здесь:

http://empire5.com/development/meteor-rendering-a-handlebars-template-with-dynamically-loaded-data/

UI.render и UI.insert являются устаревшими (хотя она по-прежнему работает в настоящее время), так что я приспособил его указания на новый способ сделать это:

after upgrading to meteor 0.9.1 i keep getting "Warning: Blaze.insert has been deprecated."

Таким образом, окончательный код выглядит следующим образом:

<div id="parentTemplate"> 

    {{>yield}} 

    <div class="right-slide-menu"> 

     <div class="sideMenu"> 

     <!-- side menu template gets injected here --> 

     </div> 

    </div> 

</div> 

Внутри моего ребенка темп Менеджер поздно я это:

Template.dashboard.events({ 

    'click #showSideMenuBtn' : function(e){ 
     e.preventDefault(); 

     // pass in the name of the template you want to inject and 
     // also the parent container you want to inject it into 
     Blaze.render(Template.addManagerForm, $('.sideMenu')[0]); 

    }; 

}); 
1

Использовать переменную Session?

Template.parentTemplate.helpers({ 
    // assuming two templates... 
    whichMenu: function() { 
    return Session.get('whichMenu') ? 'menuTemplate1' : 'menuTemplate2' 
    // or just Session.get('menuTemplate'), and you store the template name there 
    } 
}); 

Тогда

<template name="parentTemplate"> 
    {{> Template.dynamic template=whichMenu}} 
</template> 

Вы можете получить текущую "страницу" с Router.current()Session.set('menuTemplate') и соответственно.

+0

Эй, Дэн, спасибо за ответ. Я пробовал использовать Session, как вы предложили, как установить его из дочернего шаблона, и, к сожалению, он не работает. Я даже попробовал обернуть вызов Session.get в Tracker.autorun, и он все равно не будет обновляться. : - / – cpeele00