ü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?
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
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