2014-11-10 10 views
9

Il mio dilemma è che vorrei passare più proprietà di oggetti a un ferro: percorso router in Meteor. Il ragionamento è che mi piacerebbe passargli una proprietà per nominare il mio url con e una proprietà per trovare un elemento della collezione con. Sono completamente indipendenti l'uno dall'altro e non posso usare la proprietà url perché non è un valore nell'elemento della raccolta. Questo è quello che ho:Meteor, Iron: Router che passa più proprietà su Router.go

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

Il problema è che, sebbene il router gestisce questo fine e mi manda a l'URL corretto, non posso usare itemName per trovare l'oggetto elemento della raccolta che sto cercando (assumere questo è impossibile).

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

la configurazione del router di cui sopra non restituirà nulla perché name != this.params.itemName per qualsiasi oggetto.

Ho provato a passare l'oggetto this o creare oggetti con proprietà multiple, ma ferro: il router non ce l'ha.

Qualsiasi aiuto è apprezzato, grazie.

Modifica n. 1: per spiegare meglio la domanda, il mio problema è lo stesso del routing a una pagina che utilizza più ID nell'URL. Ad esempio, come fare per passare le proprietà da stirare: router per riempire le proprietà :_id e :itemId?

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

Edit # 2: Quello che mi piacerebbe fare in particolare è passare due proprietà a ferro: router e avere uno di loro essere aggiunto all'URL, e l'altro da utilizzare nella proprietà dei dati del percorso di restituire un oggetto da collezione. Esempio:

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

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

Ogni volta che provo a fare questo, si dice che _id non è definito. Quindi, in sostanza, come posso passare una proprietà a data senza far parte dell'URL e utilizzando this.params?

+0

Bene, si stanno rimuovendo gli spazi, quindi ovviamente non riesce a trovarli. Prendi in considerazione l'aggiunta di una proprietà [slug] (https://en.wikipedia.org/wiki/Semantic_URL#Slug) agli oggetti della tua collezione (alla creazione o quando l'itemName cambia) in questo modo usi semplicemente 'Router.go ('itemDetails' , {slug: this.slug}) 'e' Items.findOne ({slug: this.params.slug}) '. – user3557327

+0

Sì, conosco il ragionamento sul motivo per cui non può essere trovato - Penso di aver fatto un pessimo lavoro spiegandolo. Stavo cercando di evitare l'uso di una lumaca, ma sembra che potrebbe essere l'unico modo per aggirarla. Grazie per l'aiuto. – TheNastyOne

risposta

8

È la domanda come passare più parametri a Router.go? Basta mettere tutti in oggetto per il secondo parametro:

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

Edit:

Ok, se si desidera passare valori arbitrari all'URL, è possibile utilizzare paramters di query:

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

l'id sarà ancora nel URL però, sarà simile a questa:

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

e si possono recuperare è così:

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

No, non esattamente.Mi chiedo perché non riesco a passare in più proprietà per ironizzare: router, e chiamare una di queste proprietà SOLO nella proprietà dei dati. Sto per aggiornare la mia domanda per renderla più specifica. – TheNastyOne

+0

e come posso passare questo nel mio controller angolare dopo aver eseguito il rendering della nuova pagina? –

+0

@ Nachbar90, non ho lavorato con angolare, ma se è tutto simile a fiammata, qualunque cosa tu ritorni nei dati sarà disponibile per i tuoi modelli. – solarc

Problemi correlati