2016-04-01 7 views
0

Ich versuche, das eindeutige Profil eines Babysitters (z. B. Babysitter-Benutzername, Stadt, Postleitzahl, etc ...) aus einem Schema/Sammlung namens "Babysitter" anzuzeigen.Meteor: Abfragen einer Sammlung basierend auf einem URL-Parameter

Die URL Babysitter einzigartige _id korrekt enthält, sagen:

http://localhost:3000/test/PqMviBpYAmTA2b5ec

aber ich es nicht schaffen, alle anderen Felder abzurufen.

meteor question - screenshot

Ich habe versucht, die MongoDB in zwei Dateien Abfrage: routes.js und die Vorlage test.js

1) in routes.js

Router.route('/test/:_id', { 
name: 'test', 
data: function() { 

return Babysitters.findOne({ _id: this.params._id }); 
} 
}); 

2) in test.js

Template.test.helpers({ 

data: function() { 

//sitterusername = this.params.sitterusername; 
//console.log(this.params._id); 

return Babysitters.findOne({ _id: this.params._id }); 
} 
}); 

die HTML-Datei: test.html

<template name="test"> 
    {{#with data}} 
    <ul> 
     <li><img src="/" {{photourl}} height="100" width="100" ></li> 
     <li>Babysitter username: {{ sitterusername }}</li> 
     <li>Presentation: {{ presentation }}</li> 
     <li>City: {{ city }}</li> 
     <li>Postal Code: {{ postalcode }}</li> 
     <li>Mother tongue: {{ mothertongue }}</li> 
     <li>Languages spoken {{ languagesspoken }}</li> 
     <li>Experience {{ experience }}</li> 
     <li>Homework help: {{ homeworkhelpavailable }}</li> 
     <li>Hourly wages: {{ hourlywages }} €/h</li> 
    </ul> 
    {{/with}} 
</template> 

Ich habe alle möglichen Arten versucht, aber die Sammlung Felder nie in der HTML-Datei angezeigt.

Danke für Ihre Hilfe, ein Neuling hier.

K.

+0

Welchen Router verwenden Sie? –

+0

Was passiert, wenn Sie 'console.log (Babysitters.findOne ({_id: this.params._id})) schreiben;' in der Browser-Konsole, wenn die App läuft? –

+0

1) Router ist Eisen Router – Kami

Antwort

0

Höchstwahrscheinlich werden Sie nicht alle Babysitters an den Client so Ihre .findOne() kehrt nichts veröffentlichen.

Dies ist ein gängiges Router-Muster, in dem Sie ein einzelnes Dokument anzeigen möchten, das normalerweise nicht veröffentlicht wird. Ein guter Weg, dies in ir zu lösen, ist zu waitOn ein Abonnement für das einzelne Dokument:

waitOn: function(){ 
    return Meteor.subscribe('oneBabysitter', this.params._id); 
} 

Auf dem Server veröffentlichen:

Meteor.publish('oneBabysitter',function(_id){ 
    return Babysitters.find(_id); 
}); 

Beachten Sie, dass, obwohl diese Veröffentlichung nur wird eine Rückkehr Einzeldokument Sie müssen immer noch eine .find() und nicht eine .findOne() tun, weil Publikationen einen Cursor oder ein Array von Cursorn, keine Objekte zurückgeben müssen.

+0

Ich habe in routes.js implementiert: 'Router.route ('/ test /: _ id', { Name: 'test', waitOn: function() { zurück Meteor.subscribe ('oneBabysitter', this.params ._id); } }); 'und in Server \ publish.js' Meteor.publish ('oneBabysitter', Funktion (_id) { return Babysitters.find ({_id: this.params._id})); ' – Kami

+0

Ich bin nicht ganz da: Ich bin auf die richtige URL für einen Babysitter verwiesen, zB: aber die loading.html Vorlage wird anstelle der angezeigt test.html Vorlage. Irgendwelche Vorschläge ? – Kami

+0

Entschuldigung, ich habe einmal zu viele ausgeschnitten und eingefügt. Die Publish-Funktion kennt offensichtlich nicht "this.params". Probieren Sie die aktualisierte Veröffentlichung aus. –

Verwandte Themen