So erhalten Sie das Ergebnis einer Meteor.call-Funktion in einer Vorlage

Ich versuche, eine Paginierungsfunktion für die Verwendung in einem Meteor-Client zu erstellen. Daher muss ich die Anzahl der Datensätze auf dem Server kennen.

Auf dem Server (in server / bootstrap.coffee) habe ich diesen Code:

<code>Meteor.methods
  ContactsCount: ->
    Contacts.find().count()
    console.log("Totalrecords: " + Contacts.find().count())
</code>

Der Serverteil wird aufgerufen (es wird die richtige Nummer auf der Konsole angezeigt - 40)

Auf dem Client habe ich:

<code>$.extend Template.pager,
  GetRecordCount: ->
    Meteor.call("ContactsCount", (error,result) ->
    console.log('r', result)
</code>

Über die Browserkonsole wird Template.pager.RecordCount () zurückgegeben

nicht definiert
r 30

Ich verstehe, dass "undefiniert" die Rückgabe von Template.pager.RecordCount () ist und zuerst zurückgegeben wird.

Wenn das Ergebnis verfügbar ist, wird es der Konsole angezeigt.

Aber wie erhalte ich den Ergebniswert in meiner Pager-Vorlage?

Ich suche jetzt seit ein paar Stunden nach Java-Rückrufen, aber was auch immer ich versuche, ich kann es nicht zum Laufen bringen.
Bitte helfen Sie.

Hier ist ein Update.

Ich habe in der Dokumentation nach Ungültigkeit gesucht. Aber das Beispiel hilft mir nicht viel. Die Temperatur wird im Client mit einem Parameter im Funktionsaufruf eingestellt. Es wird also kein Rückruf verwendet. Der Rückruf war mein Problem.

Ich habe es so gelöst:

<code>Meteor.call("ContactsCount", myFunc)

### This is the call back function when the server
    function 'Meteor.call("ContactsCount", myFunc)' is called
    When the result from the server call is returned, this will be executed ###
myFunc = (error, result) ->
if !error
    pages = result / Session.get("page_size")
    Session.set "total_pages", Number(pages.toFixed(0) + 1)
    Session.set "total_records", result
if error
    console.log(error)
</code>

Das funktioniert. Ich frage mich immer noch, ob dies die beste Lösung ist. Ich habe viele Session.set () -Aufrufe und möglicherweise ist zu viel Triggerung aktiv.

<code>### This function will set the css classes
    for enabling or disabling the pager buttons
    in the Pager Template in myapp.html ###
SetPagerButtons = ->
 Meteor.call("ContactsCount", myFunc)
 if Session.get("current_page") <= 1
    Session.set "nextEnabled", ""
    Session.set "lastEnabled", ""
    Session.set "firstEnabled", "disabled"
    Session.set "previousEnabled", "disabled"
    Session.set "last_record", false
 else if Session.get("last_record") or Session.equals("current_page",  Session.get("total_pages"))
    Session.set "nextEnabled", "disabled"
    Session.set "lastEnabled", "disabled"
    Session.set "firstEnabled", ""
    Session.set "previousEnabled", ""
 else
    Session.set "nextEnabled", ""
    Session.set "lastEnabled", ""
    Session.set "firstEnabled", ""
    Session.set "previousEnabled", ""
    Session.set "last_record", false
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage