如何获得Meteor.call函数的结果在模板(How to get the result of a

2019-06-24 01:44发布

我试图让在一个流星客户使用分页功能。 因此,我需要知道服务器上的记录数。

在服务器(服务器/ bootstrap.coffee)我有这样的代码:

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

服务器部分被调用(它在控制台上显示正确的数字 - 40)

在客户端,我有:

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

从浏览器控制台Template.pager.RecordCount()返回

未定义
-R 30

我理解的“不确定”是Template.pager.RecordCount()的返回,它是第一回。

当结果来获得其显示到控制台。

但我怎么得到的结果在我的寻呼机模板中的价值?

我在寻找的java回调了几个小时了,但无论我尝试,我不能让它的工作。
请帮忙。

下面是一个更新。

我看着为无效文件。 但这个例子并不能帮助我很多。 温度在函数调用中的paramater设置在客户端。 因此,有没有使用回调。 回调是我的问题。

我解决了它是这样的:

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)

这工作。 我一直在想,如果这是最好的解决办法。 我有很多Session.set()的调用,也许有太多的触发事情。

### 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

Answer 1:

您需要无效的模板,这可以通过使用模板助手会话,使用集合或使用无效的上下文来完成:

http://docs.meteor.com/#invalidate

更新:

说实话,你有什么是你说的是正确的,我只想尽量减少会议的数量。 基本上有三种方法无效的模板:力与context.invalidate(无效),更新客户端收集或更新会话。

所以,是的,你可以使用此代码(须藤凌乱我不使用咖啡脚本)

//client server call
total_records = 0
page_numbers_context = null

Meteor.call("ContactsCount", contactsCountCallback)

contactsCountCallback = (error, result) ->
if !error
    total_records = result
    if page_numbers_context
        page_numbers_context.invalidate();
if error
    console.log(error)



//Add template handler
Handlebars.registerHelper('page_numbers', pageNumberCallback);
pageNumberCallback = (options)  ->
    page_numbers 

    var context = Meteor.deps.Context.current;
    if context && !page_numbers_context
        page_numbers_context = context
        context.on_invalidate ->
            page_numbers_context = null

    pages = total_records / page_size
    total_pages = Number(pages.toFixed(0) + 1)
    //HTML code built with ifs here


//In template:
{{#page_numbers}}{{/page_numbers}}


文章来源: How to get the result of a Meteor.call function in a template