2016-08-02 28 views
0

Ich habe Sammlungen wie folgt aus:Meteor Blaze Display Array

enter image description here

Ich möchte zum Beispiel iterieren object.questions.teema.

Ich habe Helfer:

Template.game.helpers({ 
    theGame: function() { 
     var theGame = Game.findOne({_id:"LhQmaZKW8eJNenyX9"}) 
     console.log(theGame) 
     return theGame 
    } 
}); 

und Vorlage:

<template name="game"> 

{{#with theGame}} 
    {{#each theGame.questions}} 
    {{teema}} 
    {{/each}} 
{{/with}} 
</template> 

Aber es funktioniert nicht, was mit der Vorlage falsch ist?

Antwort

0

‚#each theGame.questions‘ Wird nicht innerhalb der #WITH arbeiten, weil Sie die ‚Thegame‘ Objekt zugreifen können direkt.

Der Punkt ist, wenn Sie versuchen, das Game-Objekt innerhalb der # zu erhalten, mit dem Sie undefined zurückgegeben werden, da das Objekt'Game 'nicht die Game-Eigenschaft besitzt, auf die Sie innerhalb von #with block zugreifen möchten.

<template name="game"> 
    {{#with theGame}} 
    {{#each questions}} 
     //Thie #each because you have nested array. As I can see in your console log. 
     {{#each this}} 
     {{teema}} 
     {{/each}} 
    {{/each}} 
    {{/with}} 
</template> 
0

theGame.questions ist ein Array (das Sie über iterieren) von Array von Objekten, die den Schlüssel teema haben. Sie müssen also immer noch über das Array der 2. Ebene iterieren oder ein bestimmtes Element in diesem Array definieren, bevor Sie das Objekt mit der Eigenschaft teema erreichen können.

Vielleicht so etwas wie:

{{#with theGame}} 
    {{#each questions}} 
    {{#each this}} 
     {{this.teema}} 
    {{/each}} 
    {{/each}} 
{{/with}} 

Aber es hängt davon ab, warum Sie diesen 2-Level-Arrays in erster Linie haben.

+0

So etwas wie folgt aus: {{#WITH Thegame}} {{ #each theGame.questions}} {{ #each questions.teema}} {{ Teema}} {{/ jedes}} {{/ each}} {{/ with}} Dies scheint nicht zu funktionieren – Villemh

+0

Nein. Bearbeitete Antwort mit einem vorläufigen Code. Überprüfe zuerst, warum du jemals diese 2-Level-Arrays benötigst ... – ghybs

+0

Das war ein guter Vorschlag, ich brauchte keine 2-Level-Arrays. Vielen Dank. – Villemh

0

Was soll sein?

Unabhängig davon, wie Sie aus Ihrer console.log-Anweisung sehen können, gibt {{theGame.questions}} ein anderes Array zurück. Aber dieses Array gibt Objekte zurück. Das ist wirklich schwer mit Blaze abzufragen.

Die bessere Lösung wäre es abzuflachen, so dass Ihre Daten wie folgt gestaltet ist:

questions: [ 
    { 
     a: 'asdfkjah', 
     level: 'askdjfhal', 
     q: 'asdkfh', 
     teema: 'asdkfjh' 
     vaartus: 100 
    }, 
    { 
     ... 
    } 
] 

Auf diese Weise haben Sie nicht ein Array in einem Array verschachtelt. Das erlaubt Ihnen zu:

{{#with theGame}} 
    {{#each theGame.questions}} 
    {{this.teema}} 
    {{/each}} 
{{/with}}