Como obter o resultado de uma função Meteor.call em um modelo
Eu estou tentando fazer uma função de paginação para uso em um cliente do Meteor. Portanto, preciso saber a contagem de registros no servidor.
No servidor (no servidor / bootstrap.coffee) eu tenho este código:
<code>Meteor.methods ContactsCount: -> Contacts.find().count() console.log("Totalrecords: " + Contacts.find().count()) </code>
A parte do servidor é chamada (exibe o número correto no console - 40)
No cliente eu tenho:
<code>$.extend Template.pager, GetRecordCount: -> Meteor.call("ContactsCount", (error,result) -> console.log('r', result) </code>
No console do navegador, Template.pager.RecordCount () retorna
Indefinido
r 30
Eu entendo que o 'indefinido' é o retorno de Template.pager.RecordCount () e é retornado primeiro.
Quando o resultado é disponibilizado, ele é exibido no console.
Mas como obtenho o valor do resultado no meu modelo de pager?
Estou pesquisando callbacks java por algumas horas agora, mas o que eu tente, eu não consigo fazê-lo funcionar.
Por favor ajude.
Aqui está uma atualização.
Eu olhei para a documentação para invalidar. Mas o exemplo não me ajuda muito. A temperatura é definida no cliente com um parâmetro na chamada de função. Portanto, não há retorno de chamada usado. O retorno de chamada foi o meu problema.
Eu resolvi assim:
<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>
Isso funciona. Ainda estou me perguntando se essa é a melhor solução. Eu tenho um monte de chamadas Session.set () e talvez haja muito gatilho acontecendo.
<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>