2013-01-06 13 views
6

Ich benutze Meteor 0.5.2 und versuche zu lösen, was mir scheint, ist ein offensichtliches Muster, das eine einfache Lösung haben sollte.Gibt es eine Möglichkeit, einen Parameter an Lenker Vorlage in Meteor übergeben?

Ich habe eine Vorlage, die unterschiedliche Datenstück in jeder Vorlage Instanzen zurückgeben sollte.

Zum Beispiel - Ich habe eine Vorlage mit TV-Programm - Show by Show.

Dann muss ich zwei Instanzen der gleichen Vorlage mit unterschiedlichen Daten anzeigen - eine mit vergangenen Shows und eine mit kommenden Shows.

So habe ich eine TV-Programmvorlage:

<template name="tv_program"> 
    {{#each shows}} 
    ... 
</template> 

Im Idealfall würde Ich mag, wie etwas tun:

{{> tv_program past_shows}} 
... 
{{> tv_program upcoming_shows}} 

einen Parameter zu übergeben Vorlageninstanz tv_program, dass ich von JavaScript lesen und einstellen die Mongo-Abfragen.

Momentan habe ich meinen Template/Js-Code kopiert/eingefügt und die Mongo-Abfragen angepasst, aber es muss einen besseren Weg geben.

Ich habe Partials/Helfer mit Argumenten untersucht, aber das scheint nicht die Lösung für mein Problem zu sein.

Danke, Vladimir

Antwort

6

Sie nähern sich dem Problem auf der falschen Ebene. Anstatt zu versuchen, Ihrem Code zu sagen, was Sie mit Ihren Vorlagen tun sollen, sollten Sie Ihrer Vorlage mitteilen, was Sie mit Ihrem Code tun sollen. Zum Beispiel:

Template.past_shows.shows = function() { return shows(-1); } 

Template.upcoming_shows.shows = function() { return shows(1); } 

function shows(order) { 
    return Shows.find({}, {$sort: order}); 
} 

<template name="past_shows"> 
    {{#each shows}} 
    {{> show}} 
    {{/each}} 
</template> 

<template name="upcoming_shows"> 
    {{#each shows}} 
    {{> show}} 
    {{/each}} 
</template> 

<template name="show"> 
    <li>{{_id}}: {{name}}</li> 
</template> 
+0

Danke für das Zeigen von mir in dieser Richtung Rahul. Ich habe meinen Code wie von dir vorgeschlagen umstrukturiert. Nachdem ich fertig bin, bleibt mir ein Teil des HTML-Codes, der in beiden Vorlagen identisch ist (in den Beispielen past_shows, ancient_shows) - sie sollten gleich aussehen und der echte Vorlagencode ist komplex mit Bildern und benutzerbezogenen Daten. Ich denke, das ist in Ordnung, da es besser ist, redundanten identischen Code in meinen Ansichten zu haben als in "controller/model" JavaScript. – vladimirp

+0

Können Sie den doppelten Code stattdessen in die 'show' Vorlage übertragen? –

+0

Eigentlich kann ich das tun. Mein echter Code unterscheidet sich von dem einfachen Beispiel, das ich in meiner Frage verwendet habe. Danke Dean. – vladimirp

0

Wenn Sie eine Zustandsmaschine für Ihre Anwendung verwenden, wie meteor-router, können Sie eine Vorlage verwenden und es mit dem kommenden oder in der Vergangenheit zeigt bevöl auf App-Status abhängig.

Verwandte Themen