Sto provando a creare una funzione di impaginazione da utilizzare in un client Meteor. Quindi ho bisogno di conoscere il conteggio dei record sul server.Come ottenere il risultato di una funzione Meteor.call in un modello
Sul server (server/bootstrap.coffee) Ho questo codice:
Meteor.methods
ContactsCount: ->
Contacts.find().count()
console.log("Totalrecords: " + Contacts.find().count())
La parte server si chiama (si visualizza il numero corretto sulla console - 40)
Sul cliente che ho:
$.extend Template.pager,
GetRecordCount: ->
Meteor.call("ContactsCount", (error,result) ->
console.log('r', result)
Dal Template.pager.RecordCount console del browser() restituisce
indefinito
r 30
Capisco la 'undefined' è il ritorno da Template.pager.RecordCount() e viene restituito prima.
Quando il risultato è disponibile viene visualizzato sulla console.
Ma come si ottiene il valore del risultato nel modello di cercapersone?
Sto cercando i callback Java per alcune ore, ma qualunque cosa provi, non riesco a farlo funzionare.
Per favore aiuto.
Ecco un aggiornamento.
Ho esaminato la documentazione per invalidare. Ma l'esempio non mi aiuta molto. La temperatura viene impostata nel client con un parametro nella chiamata di funzione. Quindi non viene utilizzata la richiamata. Il callback era il mio problema.
ho risolto in questo modo:
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)
Questo funziona. Mi sto ancora chiedendo se questa è la soluzione migliore. Ho molte chiamate Session.set() e forse c'è troppa attivazione in corso.
### 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
Si prega di guardare l'aggiornamento alla mia domanda. –
Personalmente sto facendo cose simili chiamando invalido sul contesto corretto quando il callback è fatto. Stai praticamente facendo le stesse cose, ma con le sessioni. Tuttavia, sto utilizzando gli helper che consentono di restituire stringhe html ma è possibile implementarlo in altri modi. Aggiungerò un esempio di codice alla mia risposta sopra. – jonathanKingston
Mi piacerebbe vedere un esempio di codice che utilizza invalidate. Ho l'idea che usare troppo Session attiverà molte azioni internet che potrebbero essere evitate. Il codice completo per il mio esempio di cercapersone è su github: github.com/eric-naguras/MyApp.git –