Ich versuche, den Inhalt einer Meteor-Sammlung auf einer Vorlage zuzugreifen. Der erste Schritt ist eine Suche, die es der App ermöglicht, bestimmte Artikel aus der Mongo-Sammlung Spieler anzuzeigen. Wenn Sie dann auf den Artikel klicken, gelangen Sie zur Seite showPerson, auf der der Inhalt dieser Artikel angezeigt wird. Bisher konnte ich die Suche zum Laufen bringen, aber wenn Sie auf ein Element klicken, wird die neue Seite gerendert, aber es werden keine Daten hinzugefügt.Zugriff auf Meteor-Sammlung durch Vorlage
Ich habe versucht, hier Antworten durchzugehen, aber ich konnte nicht herausfinden, was ich falsch mache.
Auch wenn Sie in <template name="search">
bemerken, habe ich __originalId
. Ich habe auch versucht _id
und id
aber immer noch keinen Erfolg. Apropos ID ist was ist der Unterschied zwischen diesen?
Und meine Extra-Pakete sind
easy:search
aldeed:collection2
aldeed:autoform
kadira:flow-router
kadira:blaze-layout
arillo:flow-router-helpers
ich auch noch autopublish haben und unsicher installiert, so dass ich denke, es ist kein Abonnement Problem ??
Disclaimer - ich bin neu Meteor und Javascript, so wenden Sie sich bitte diese auseinander reißen und meine Hand halten :)
Mein html ist
Suchoptionen
<template name="search">
{{> EasySearch.Input index=playersIndex}}
<ul>
{{#EasySearch.Each index=playersIndex}}
<li>Name of the player: <a href="{{pathFor 'showPerson'}}/{{__originalId}} ">{{name}}</a> {{name}} Score of the Player: ({{score}})</li>
{{/EasySearch.Each}}
</ul>
{{> EasySearch.LoadMore index=playersIndex}}
{{#EasySearch.IfNoResults index=playersIndex}}
<div class="no-results">No results found!</div>
{{/EasySearch.IfNoResults}}
</template>
Seite das soll Inhalt anzeigen
<template name="showPerson">
<h1>Show Person Details: {{name}}</h1>
<div class="row">
name: {{name}}
</div>
<div class="row">
score: {{score}}
</div>
<div class="row">
age: {{age}}
</div>
</template>
Mein Javascript ist
Tracker.autorun(function() {
let cursor = PlayersIndex.search('Marie'); // search all docs that contain "Marie" in the name or score field
console.log(cursor.fetch()); // log found documents with default search limit
console.log(cursor.count()); // log count of all found documents
});
Template.search.helpers({
playersIndex:() => PlayersIndex // instanceof EasySearch.Index
});
Template.update.helpers({
exampleDoc: function() {
return Players.findOne();
}
});
Template.myMenu.helpers({
items: function(){
return MyCollection.find();
}
});
Template.myMenu.events({
'onChange #mySelect': function(ev){
...handle the event.
}
});
Und meine Routen
FlowRouter.route('/', {
action: function() {
BlazeLayout.render("home");
}
});
FlowRouter.route('/players/:_id', {
name: "showPerson",
action: function(params) {
console.log(params._id);
BlazeLayout.render('showPerson');
}
});
FlowRouter.route('/hello', {
action: function() {
BlazeLayout.render('hello');
}
});
Und wenn es hilft hier zwei Screenshots
Datenbank und das Schema
Players = new Mongo.Collection('players');
PlayersSchema = new SimpleSchema({
"name": {
type: String,
label: "Business Name"
},
"address": {
type: String,
label: "Address"
},
"website": {
type: String,
label: "Website",
optional: true
},
}
Players.attachSchema(PlayersSchema);
PlayersIndex = new EasySearch.Index({
collection: Players,
fields: ['name', 'score'],
engine: new EasySearch.MongoDB()
});
Danke. Diese Antwort funktioniert perfekt. Ich habe allerdings eine Frage. Wenn ich __originalID benutze, erhalte ich die Ergebnisse als 'zc3SpXvua3qCiibCJ' und erhalte Ergebnisse auf der Seite, aber wenn ich _id benutze, erhalte ich nichts und die Konsole druckt die ID in einem komischen Format' zc3SpXvua3qCiibCJ "" {} 'warum ist das. Der einzige Grund, den ich frage, ist, weil alle Beispiele, die ich sehe, _id anstelle von __originalID verwenden –
Können Sie einige Beispieldaten von Ihrer Ansammlung zeigen? '_id' ist die standardmäßige eindeutige ID, die automatisch für alle Sammlungen erstellt wird. '_originalID' hat in Meteor afaik keine besondere Bedeutung. –
Ich habe es am Ende meiner Frage hinzugefügt –