2016-05-29 39 views
0

Ich habe mich gefragt, ob Sie mir einen Hinweis geben könnten, wie Sie dieses "Problem" angehen. Ich bin ein Neuling in JS (+ Meteor), also könnte es für Sie sehr einfach sein. Ich arbeite mit helpers und blaze/spacebars zum Rendern.Meteor/Blaze Rendering: {{each}} in einem anderen {{each}} gibt nicht die richtigen Daten zurück (Datenkontext)

ich einen einfachen Helfer haben:

Template.monitoring.helpers({ 

    'realtime': function(){ 
     return { 
      house: house.find({}), 
      neighbours: neighbours.find({}), 
     } 
    } // end of realtime 

}); // end of helpers 

An diesem Punkt ist alles in Ordnung. Ich kann die gewünschten Daten abrufen. Das Problem ist, dass ich es nicht so wiedergeben kann, wie ich es möchte. Unter meiner template.

<template name="monitoring"> 

    {{#each realtime.house}} 
    <div class="card red"> 
    SHOW STUFF ABOUT HOUSE 
    </div> 

    <div class="card blue"> 
     {{#each realtime.neighbours}} 
     SHOW STUFF ABOUT NEIGHBOURS OF THE SPECIFIC HOUSE 
     {{/each}} 
    </div> 

    {{/each}} -> end of each realtime.house 

</template> 

Genauer gesagt, wenn meine Vorlage wiedergegeben wird:

  • Zahl der roten Karten = Anzahl der Häuser => perfekt
  • jede rote Karte enthält die Daten von ein Haus => perfekt

  • Anzahl der blauen Karten = Anzahl der Häuser => perfekt

  • jede blaue Karte enthält die Daten alle Nachbarn => FALSCH. Was ich will, ist die Daten von Nachbarn in Bezug auf das spezifische Haus

Haben Sie, wie Sie die richtigen Sachen am richtigen Ort? Vielen Dank.

Antwort

0

Sie benötigen zwei Helfer: einen, der die Häuser zurückgibt, und einen, der die Nachbarn mit einem Haus als Kontext zurückgibt. Ohne das Schema kann ich keine genaue Antwort geben, aber nehmen wir an, jeder Nachbar hat eine houseId Eigenschaft, die die beiden verbindet.

Template.monitoring.helpers({ 
    houses: function() { 
    return house.find(); 
    }, 

    neighbors: function() { 
    // Note the context here is a house because it's 
    // called from within an each. 
    return neighbours.find({ houseId: this._id }); 
    }, 
}); 

Und Ihre Vorlage würde (in seine jeweils einer blauen Karte vorausgesetzt Nachbarn soll) in etwa so aussehen:

<template name="monitoring"> 
    {{#each houses}} 
    <div class="card red"> 
     SHOW STUFF ABOUT HOUSE 
    </div> 
    {{#each neighbours}} 
     <div class="card blue"> 
     SHOW STUFF ABOUT NEIGHBOURS OF THE SPECIFIC HOUSE 
     </div> 
    {{/each}} 
    {{/each}} 
</template> 
+0

Es perfekt beantwortet! Und funktioniert wie ein Zauber! – nerotulip