Ich entwickle gerade eine vereinfachte Anwendung mit Meteor js und stehe vor einem Problem.

Eigentlich habe ich eine Vorlage mit einer #each-Anweisung wie folgt:

<template name="insidePlanning">
  <div class="row m-t">
    <div class="backGrey col-md-8">
      <div class="row">
        {{#each users}}
          <div class="col-md-{{countUsersCol}}">
            {{name}}
          </div>
        {{/each}}
      </div>

    </div>

    <div class=" col-md-4">
      <form>
        <div class="form-group">
          <input type="text" name="text" placeholder="Type to add new tasks" class="form-control" />
        </div>
      </form>

      <ul class="list-unstyled">
        {{#each taskNotAffected}}
          <li>{{title}}</li>
        {{/each}}
      </ul>
    </div>
  </div>
</template>

Bis auf die {{countUsersCol}} funktioniert alles einwandfrei ...

Hier ist mein Vorlagenhelfer:

  Template.insidePlanning.helpers({
    countUsersCol:function(){
      if(this.users){
        return Math.round(12/this.users.length);
      }
      return 0;
    }
  });

Wenn ich {{countUsersCol}} in die Anweisung #each einfüge, erhalte ich immer 0. Wenn ich es direkt über #each platziere, wird 6 angezeigt (der Wert, den ich tatsächlich benötige). Zusammenfassend lässt sich sagen, dass #each innerhalb seiner Anweisung einen anderen Bereich erstellt ...

Ich habe versucht, {{../countUsersCol}} zu verwenden, aber es passiert nichts und ich weiß nicht, was ich eigentlich tun soll.

Könnten Sie mir bitte ein wenig helfen?

0
mfrachet 13 Aug. 2015 im 16:52

3 Antworten

Beste Antwort

Ihr users ist Teil des übergeordneten Datenkontexts des #each -Blocks: Innerhalb der Schleife enthält this nur das, was in der aktuellen Single {{X3} enthalten ist. } Dokument, an dem Sie arbeiten. Sie müssen Template.parentData() verwenden, um Daten einer höheren Ebene abzurufen aus einem Helfer heraus.

  Template.insidePlanning.helpers({
    countUsersCol:function(){
      var parentData = Template.parentData(1);
      if(parentData.users){
        return Math.round(12/parentData.users.length);
      }
      return 0;
    }
  });
2
SylvainB 13 Aug. 2015 im 14:10

Wenn Sie sich also in einem Block befinden, verweist das Schlüsselwort this auf eines der Objekte, über die Sie im Block {{#each}} iterieren. Nehmen wir also an, dass die "Benutzer" jedes Blocks ein Helfer sind, der eine Liste der Benutzer zurückgibt, die Sie an return Meteor.users.find({}); übergeben haben. Wenn Sie dies verwenden, gibt der Block {{#each}} ein Benutzerdokument zurück, z. B.: {name: "eric", occupation: "doctor"} oder was auch immer Sie unterschreiben. Um die Anzahl aller Benutzer zu ermitteln, denen Sie für den Block {{#each}} unterworfen sind, benötigen Sie einen Helfer, der alle Datensätze zählt. etwas Vereinfachendes könnte sein: Template.myTemplate.helpers({ userCount: function() { return Meteor.users.find({}).count();} });

0
TDmoneybanks 13 Aug. 2015 im 14:33

Normalerweise wird each mit einem Cursor verwendet, also gehe ich davon aus, dass Sie das verwendet haben. Sie verwenden this.users.length und wenn this.users ein Cursor ist, sollten Sie kein .length erhalten. Sie sollten this.users.count() versuchen.

0
corvid 13 Aug. 2015 im 14:00