2016-04-23 6 views
-1

ich durch eingebettetes Dokument Schleife habe ein eingebettetes Dokument in einer MongoDB Sammlung „Autor“ als solche:Wie in Meteor

{"Name": "John Doe", 
"Country": "U.S.A", 
"Books": [ 
    {"BName": "Book1", "Year": "1950"}, 
    {"BName": "Book2", "Year": "1960"} 
    ] 
} 

Ich mag die Bücher auf Daten zuzugreifen, durchlaufen sie und zeigen jedes Buch in ein Tisch.

Dies ist, was meine JS-Datei Dies ist der HTML-Code für meinen Bericht

<template name="Author"> 
<body> 
    <div class="row"> 
    <div class="col-md-2"> 
     Book Name 
    </div> 
    <div class="col-md-2"> 
     Year 
    </div> 
    </div> 
    {{#each author}} 
    {{> bookdetails}} 
    {{/each}} 
</body> 
</template> 

<template name="bookdetails"> 
    <div class="row"> 
    <div class="col-md-2"> 
     {{Books.BName}} 
    </div> 
    <div class="col-md-2"> 
     {{Books.Year}} 
    </div> 
    </div> 
</template> 

Dies funktioniert, wenn ich nur ein Datensatz in der Embedded-Bücher Dokument haben, aber nicht wie

Template.Author.helpers({ 
    author: function() { 
     //_id of the Author is passed via the URL 
     return Author.find({"_id": FlowRouter.getParam('_id')}) 
    } 
}); 

aussieht, wenn Ich habe mehr als einen Datensatz - was sinnvoll ist, da "Books.BName" zu diesem Zeitpunkt mehrdeutig ist.

Ich muss "Bücher" durchlaufen und jeden BName und Jahr ausgeben. This Antwort ist die nächste, die ich dabei zu tun, aber ich bekomme den Fehler: TypeError: _.value ist keine Funktion Dies kann sein, weil ich ein eingebettetes Dokument im Gegensatz zu einem Array haben.

Antwort

0

Ihre Benennung ist verwirrend. Sie haben Book Helfer, die einen Autor zurückgibt, und das ist, was Sie an die Vorlage bookdetails übergeben. Sie sollten den Helfer in author umbenennen, um Verwirrung zu vermeiden. Dann können Sie mit {{#each author.Books}} das eigentliche Bücher-Array durchlaufen.

Ferner, in der bookdetails Vorlage Zugriff auf die Buchparameter direkt, z. {{BName}} anstelle von {{Books.BName}}.

+0

Danke @ Hubert-og. Guter Punkt zum Nennen - ich habe das in der Frage geändert. '{{#ach jedem Autor.Books}}' ist richtungsweisend, wonach ich gesucht habe, aber diese Änderung und den Wechsel zu '{{BName}}' (was Sinn macht, wenn man durch author.Books iteriert) funktioniert nicht für Ich (gibt keine Daten zurück). –

+0

Ich habe nicht bemerkt, dass du 'Author.find' tust. Ändere das in 'Author.findOne' zusammen mit den anderen Tweaks. –

+0

Danke, das funktioniert! Es schlägt jedoch fehl, wenn es nur ein Buch für einen bestimmten Autor gibt (im Gegensatz zu mehr als einem, wenn es funktioniert). Ich bekomme den folgenden Fehler: '{{#each}} akzeptiert zur Zeit nur Arrays, Cursor oder falsche Werte. –