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 wissen.So erhalten Sie das Ergebnis einer Meteor.call-Funktion in einer Vorlage
auf dem Server (in Server/bootstrap.coffee) ich diesen Code haben:
Meteor.methods
ContactsCount: ->
Contacts.find().count()
console.log("Totalrecords: " + Contacts.find().count())
Der Server-Teil genannt wird (es zeigt die richtige Nummer auf der Konsole - 40)
Auf der Client ich habe:
$.extend Template.pager,
GetRecordCount: ->
Meteor.call("ContactsCount", (error,result) ->
console.log('r', result)
Von der Browserkonsole Template.pager.RecordCount() gibt
undefinierte
R 30
I die 'undefiniert' zu verstehen die Rückkehr aus Template.pager.RecordCount() ist, und es wird zuerst zurückgegeben.
Wenn das Ergebnis verfügbar ist, wird es der Konsole angezeigt.
Aber wie bekomme ich den Wert von Ergebnis in meiner Pager-Vorlage?
Ich suche Java-Callbacks für ein paar Stunden jetzt, aber was auch immer ich versuche, ich kann es nicht zur Arbeit bekommen.
Bitte helfen.
Hier ist ein Update.
Ich schaute auf die Dokumentation für ungültig zu machen. 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 es wie folgt gelöst:
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)
Dies funktioniert. Ich frage mich immer noch, ob dies die beste Lösung ist. Ich habe viele Session.set() -Aufrufe und vielleicht gibt es zu viel Auslösung.
### 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
Schauen Sie bitte auf das Update auf meine Frage. –
Persönlich mache ich ähnliche Dinge, indem ich im richtigen Kontext Ungültigmachen aufruft, wenn der Rückruf abgeschlossen ist. Sie machen im Grunde die gleichen Dinge, aber mit Sitzungen. Ich benutze jedoch Helfer, mit denen Sie HTML-Strings zurückgeben können, aber Sie könnten es auf andere Weise implementieren. Ich werde ein Codebeispiel zu meiner Antwort oben hinzufügen. – jonathanKingston
Ich würde gerne ein Codebeispiel mit ungültigen sehen. Ich habe die Idee, dass die Verwendung von Session zu viel eine Menge von Internet-Aktionen auslösen wird, die vielleicht vermieden werden können. Der vollständige Code für mein Pager Beispiel ist auf GitHub: github.com/eric-naguas/MyApp.git –