2016-11-06 16 views
0

Ich habe einen Klienten, der diese Helfer haben:Meteorjs - Meteor.call ('myMethod') liefert drei Objekte und nicht ein Array?

Template.eventTemplate.helpers({ 
    returnUsersEvents: function(){ 
     Meteor.call("events.getByUserId", function(error, result){ 
     if(error){ 
      console.log("error" + error.reason); 
      return; 
     } 
     console.log(result); 
     return result; 
     }); 

    } 
}); 

Die Methode zur Sammlung

Meteor.methods({ 
    'events.insert'(Event) { 
    Events.insert(Event); 
    }, 
    'events.getByUserId'(){ 
    var events = Events.find({UserId: Meteor.userId()}).fetch(); 
    console.log(events); 
    return events; 
    } 
}) 

ich ein Objekt in meiner Sammlung haben. Aber ich erhalte drei Objekte des gleichen Typs. Kann mir jemand sagen, was ich falsch mache?

Hier ist meine Vorlage

<ul class="demo-list-item mdl-list"> 
    {{#each returnUsersEvents}} 
    <li class="mdl-list__item"> 
     <span class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
      <i class="material-icons mdl-list__item-icon">map</i> 
      <a class="" href="/event/{{_id}}">{{EventName}}</a> 
     </span> 
    </li> 
    {{/each}} 
</ul> 
+0

Wegen fetch() – maciekz

+0

I habe versucht, fetch zu entfernen, aber dann kehrt überhaupt nichts zurück. Nicht einmal ein Fehler. –

Antwort

3

Ihr Problem ist, dass Ihr returnUsersEvents() Helfer gar nichts zurückkehr. Sie haben eine return-Anweisung innerhalb der Callback- des Meteor.call(). Dies wird nicht wird der Rückgabewert der .call() selbst.

Meteor.call() ist asynchron, was bedeutet, dass die .call() zurückgibt, bevor das Ergebnis innerhalb des Rückrufs verfügbar ist. Um diese Arbeit zu machen, müssen Sie die Helfer das Ergebnis von dem Rückruf zurückzukehren, wenn es kommt, die zu einem bestimmten Zeitpunkt in der Zeit nach dem Helfer das erste Mal zurückgekehrt ist.

Das typische Muster in Meteor, um dies zu erreichen, besteht darin, eine ReactiveVar zu verwenden, die der Helfer verfolgt, und diese ReactiveVar innerhalb des Rückrufs zu setzen.

Here ist ein SO Antwort, die zeigt, wie das zu tun.

Und auf dem Server: Sie benötigen den holen. Andernfalls geben Sie einen Datenbankcursor zurück, der kein serialisierbares Objekt ist (was bedeutet, dass er nicht über DDP zurückgegeben werden kann).

Verwandte Themen