2016-04-05 13 views
0

Ich möchte Parameter übergeben in Meteor Helfer als here beschriebenAuswahl der Schlüssel aus parametrisierte Helfer nicht

ich ein select-Element mit den Namen der Teams schaffen, die zusammen zu spielen sind:

<select class="form-control input-lg" id="gameSelector" disabled="{{gamesSelectDisable}}"> 
    <option value="" selected="selected" disabled hidden>Select game</option> 
    {{#each games}} 
    <option value="{{this._id}}"> 
     {{teamById.name this.homeTeam}} x {{teamById.name this.guestTeam}} 
    </option> 
    {{/each}} 
</select> 

Meine Helfer Blicke wie:

games: function(){ 
    return = GamesCollection.find({'playedInDivision' : Session.get('selectedDivisionId')}); 
}, 
teamById: function(teamId){ 
    return = TeamsCollection.findOne({'_id': teamId}); 
} 

Wenn ich tun:

console.log('team ID', teamId, this); 

Ich bekomme undefined und dieses Objekt, das dem Spiele Objekt entspricht. Ich bekomme undefined auch wenn ich Strings wie geben

{{teamById.name "Some String"}} 
+0

sicherstellen, dass Ihr Abonnement – sdybskiy

+0

arbeitet habe ich noch nicht das autopublish Paket entfernen noch. Ist das ein Problem ? – karlitos

Antwort

0

ich von einem Objekt nicht versucht haben, direkt wie in einem parametrisierte Helfer einen Schlüssel bekommen. Was ich normalerweise tun würde, ist {{#with }} zu verwenden, um einen Datenkontext herzustellen (im Wesentlichen ein dieser) und dann die Schlüssel direkt zu verwenden.

<select class="form-control input-lg" id="gameSelector" disabled="{{gamesSelectDisable}}"> 
    <option value="" selected="selected" disabled hidden>Select game</option> 
    {{#each games}} 
    <option value="{{this._id}}"> 
     {{#with teamById this.homeTeam}} 
     {{name}} x 
     {{/with}} 
     {{#with teamById this.guestTeam}} 
     {{name}} 
     {{/with}} 
    </option> 
    {{/each}} 
</select> 
+0

Dies ist eigentlich genau die Lösung, mit der ich endete. Ich fand es weniger elegant und ich las auch irgendwo, dass die Verwendung von {{#with}} eher eine Umgehung für die Übergabe von Parametern an Helfer darstellt. Deshalb suche ich nach einer anderen Lösung. – karlitos

0

Danke an Michael Floyd für den Hinweis auf die richtige Richtung. Das Problem liegt in der Punktnotation, die für den Zugriff auf den Teamnamen verwendet wird. Ich kam mit einer etwas anderen Lösung, indem ich meine Hilfsfunktion parametrisierte.

<select class="form-control input-lg" id="gameSelector" disabled="{{gamesSelectDisable}}"> 
     <option value="" selected="selected" disabled hidden>Select game</option> 
     {{#each games}} 
      <option value="{{this._id}}"> 
       {{teamById this.homeTeam "name"}} x {{teamById this.guestTeam "name"}} 
      </option> 
     {{/each}} 
     </select> 

Der Helper gibt abhängig vom übergebenen Parameter ein Objekt oder nur einen relevanten Teil davon zurück.

teamById: function(teamId, param){ 
var team = TeamsCollection.findOne({'_id': teamId}); 
if (param && param in team){ 
    return team[param]; 
} 
else { 
    return team; 
} 

},

Verwandte Themen