2014-08-27 6 views
5

Ich habe eine allgemeine {{> Ausbeute}} für Eisen-Router in einer Layout-Datei, die meine Seiten, die Vorlagen sind rendert.Mehrere Ausbeute in Meteor.js Anwendungsvorlage

In einer meiner Seiten habe ich ein Seitenmenü und je nach Auswahl in diesem Menü möchte ich verschiedene Vorlagen auf dieser Seite laden.

Wie kann ich das erreichen?

+0

Die Referenz für die angenommene Antwort lautet https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#layouts – kontur

Antwort

11

Ich habe eine ähnliche Sache mit Eisen-Router layout template Option gemacht. Angenommen, ich möchte eine Home-Ansicht mit mehreren Ansichten/Vorlagen innerhalb dieser Home-Ansicht erstellen, die sich ändern. Zuerst möchte ich meine Route erklären:

<template name="layout"> 
    <aside> 
    {{> yield region='aside'}} 
    </aside> 

    <div> 
    {{> yield}} 
    </div> 

    <footer> 
    {{> yield region='footer'}} 
    </footer> 
</template> 

Damit die angegebenen Vorlagen in den Ausbeuten aside und footer in der angegebenen Stelle gemacht erhalten:

Router.map(function() { 
    this.route('home', { 
    path: '/', 
    template: 'myHomeTemplate', 
    layoutTemplate: 'layout', 
    yieldTemplates: { 
    'myAsideTemplate': {to: 'aside'}, 
    'myFooter': {to: 'footer'} 
    } 
    }); 
}); 

, wo die HTML für die Layout-Vorlage aussehen würde. Für Ihren Fall können Sie eine sidemenu Ausbeute angeben.

Nein, dass Sie das grundlegende Layout und die Idee haben, dass Sie eine andere Route definieren können. Sagen wir, wir nennen es differentHome.

Router.map(function() { 
    this.route('differentHome', { 
    path: '/differentHome', 
    template: 'myHomeTemplate', 
    layoutTemplate: 'layout', 
    yieldTemplates: { 
    'myDifferentAsideTemplate': {to: 'aside'}, 
    'myDifferentFooter': {to: 'footer'} 
    } 
    }); 
}); 

Hinweis auf dieser Strecke Erklärung ich die Ausbeute Vorlagen bin zu ändern, aber ich bin nicht die grundlegende Vorlage zu ändern, die in dem Hauptertrag erbracht werden. Jetzt auf einer Veranstaltung können Sie den Weg wieder, die die beiden unterschiedlichen Erträge Vorlagen ändern:

Router.go("differentHome"); 

Oder können Sie html Route nutzen, etwa mit einem Link.

EDIT (Haphazard Solution):

Verwenden Session Variable Seitenmenü Wahl zu diktieren.

HTML: 
<template name="main"> 
    ...... 
    <div class="sideMenu"> 
    {{#if sideMenu1}} 
     {{> side1Template}} 
    {{/if}} 

    {{#if sideMenu2}} 
     {{> side2Template}} 
    {{/if}} 
    </div> 
</template> 

JS: 
Template.main.helpers({ 
    sideMenu1 : function() { 
     return Session.equals("sideMenuChoice", "sideMenu1") 
    }, 
    sideMenu2 : function() { 
     return Session.equals("sideMenuChoice", "sideMenu2") 
    } 
}); 

Jetzt auf ein Ereignis setzen Sie die Sitzung auf was auch immer sideMenuChoice.

+0

Wie kann ich yieldTemplates-Werte ändern, indem ich auf Listenelement klicke, anstatt sie zuzuweisen im Router. – user2858924

+0

Sie könnten eine zufällige Implementierung mit Session-Variablen verwenden, die das Side Menu auch außerhalb der Routen des Iron-Routers diktieren. Es wäre keine sehr saubere Lösung, aber Sie könnten es zum Laufen bringen. Siehe oben BEARBEITEN. – Nate

+2

Beachten Sie, dass Sie 'yield's in Ihrer Vorlage definieren können, die Sie für einige Routen nicht verwenden, was sehr praktisch ist. – kontur