2014-11-10 6 views
9

überschreitet Mein Dilemma ist, dass ich mehrere Objekteigenschaften an eine Iron: Router-Route in Meteor übergeben möchte. Die Überlegung ist, dass ich gerne eine Eigenschaft übergeben möchte, um meine URL mit einer Eigenschaft und eine Eigenschaft zu benennen, mit der ich einen Sammlungsgegenstand finden kann. Sie sind völlig unabhängig voneinander und ich kann die URL-Eigenschaft nicht verwenden, da es kein Wert im Sammlungselement ist. Das ist, was ich habe:Meteor, Iron: Router, der mehrere Eigenschaften auf Router.go

Template.items.events({ 
'click': function() { 
    itemName = this.name.replace(/ /g,'') 
    Router.go('itemDetails', {itemName: itemName}) 
    } 
}); 

Das Problem ist, dass, obwohl der Router diese feine Griffe und schickt mich auf die richtige URL, ich nicht itemName verwenden können die Auflistelement Objekt zu finden, die ich suche (nehme an, dies ist unmöglich).

Router.route('/items/:itemName', { 
    name: 'itemDetails', 
    data: function() {return Items.findOne({name: this.params.itemName})} 
}); 

Die obige Router-Konfiguration wird nichts zurück, weil name != this.params.itemName für jedes Objekt.

Ich habe versucht, die this Objekt übergeben, oder Erstellen von Objekten mit mehreren Eigenschaften, aber Eisen: Router wird es nicht haben.

Jede Hilfe wird geschätzt, danke.

Bearbeiten # 1: Um die Frage weiter zu erklären, ist mein Problem das gleiche wie das Routing zu einer Seite, die mehrere IDs in der URL verwendet. Zum Beispiel, wie würde ich über die Weitergabe von Eigenschaften an Eisen gehen: Router, um die :_id und :itemId Eigenschaften zu füllen?

Router.route('items/:_id/:_itemId', { 
    name: 'detailDetails', 
    data: function() {...} 
}); 

Edit # 2: Was würde ich speziell tun zwei Eigenschaften Eisen passieren: Router und haben eine von ihnen an die URL angehängt werden, und die andere in der Daten Eigenschaft der Route verwendet werden einen Sammlungsgegenstand zurückgeben. Beispiel:

.... 
    Router.go('itemDetails', {_id: itemBeingPassedId, itemName: nameToBeAppendedToURL}) 
.... 

Router.route('/items/:itemName', { 
    name: 'itemDetails', 
    data: function(){return Items.findOne(_id) 
}); 

Immer wenn ich versuche, das zu tun, heißt es, dass _id nicht definiert ist. Also, im Grunde, wie kann ich eine Eigenschaft an data übergeben, ohne dass es ein Teil der URL sein und this.params verwenden?

+0

Nun, Sie entfernen Räume, so natürlich kann es nicht finden. Ziehen Sie in Betracht, Ihren Sammelobjekten eine Eigenschaft [slug] (https://en.wikipedia.org/wiki/Semantic_URL#Slug) hinzuzufügen (bei der Erstellung oder wenn sich der itemName ändert), verwenden Sie einfach 'Router.go ('itemDetails' , {slug: this.slug}) 'und' Items.findOne ({slug: this.params.slug}) '. – user3557327

+0

Ja, ich kenne die Gründe dafür, warum es nicht gefunden werden kann - ich glaube, ich habe es schlecht gemacht, das zu erklären. Ich habe versucht, eine Schnecke zu vermeiden, aber es scheint, als ob das der einzige Weg wäre. Danke für die Hilfe. – TheNastyOne

Antwort

8

Ist die Frage, wie mehrere Parameter an Router.go übergeben werden? Legen Sie einfach alle von ihnen in dem Objekt für den zweiten Parameter:

Router.go('itemDetails', {_id: 'foo', '_itemId': bar}); 

Edit:

Ok, wenn Sie beliebige Werte an die URL übergeben möchten, können Sie Abfrage paramters verwenden:

Router.go('itemDetails', {itemName: 'foo'}, {query: 'id=bar'}); 

die ID wird allerdings in der uRL immer noch, es wird wie folgt aussehen:

http://example.com/items/foo?id=bar 

Und Sie können abrufen es ist wie folgt:

Router.route('/items/:itemName', { 
    name: 'itemDetails', 
    data: function(){ 
     return { 
      item: Items.findOne(this.params.query.id), 
      itemName: this.params.itemName 
     }; 
    } 
); 
+2

Nein, nicht genau.Ich frage mich, warum ich nicht mehrere Eigenschaften an Eisen weitergeben kann: Router, und nenne eine dieser Eigenschaften NUR in der Eigenschaft data. Ich bin dabei, meine Frage zu aktualisieren, um sie genauer zu machen. – TheNastyOne

+0

und wie kann ich das nach dem Rendern der neuen Seite an meinen Winkelregler weitergeben? –

+0

@ Nachbar90, ich habe nicht mit eckigen gearbeitet, aber wenn es etwas wie Flamme ist, dann wird alles, was Sie in den Daten zurückgeben, Ihren Vorlagen zur Verfügung stehen. – solarc