在加载时使用Meteor.call加载数据

时间:2014-02-14 17:03:21

标签: meteor

尝试渲染模板时,我想从服务器加载数据。我正在尝试使用Meteor.call,但根据文档,我显然不在存根中。

如果我在事件处理程序中使用Meteor.call,我回复的响应是正确的。如果我在template.created或类似内容中调用它,我会得到一个未定义的响应。我想我可以使用异步调用来执行它,然后在可用时呈现它。但还有另一种方式吗?

我不希望客户端直接访问数据库,我希望它来自服务器。

  //This doesn't work
  Template.config.created = function() {
    console.log(Meteor.call('getValue')); //returns undefined
  };

   //This works
   Template.config.events({
    'blur #button' : function () {
      console.log(Meteor.call('getValue')); //Prints value
    }

任何线索?

d

2 个答案:

答案 0 :(得分:2)

来自文档:

  

在客户端上,如果你没有传递一个回调并且你不在存根中,call将返回undefined,你将无法获得该方法的返回值。那是因为客户端没有光纤,因此实际上没有任何方法可以阻止远程执行方法。

我不确定为什么你的事件处理程序调用正在工作......没有任何方法可以在没有Fibers的JavaScript中同步获取服务器响应。解决方案只是提供异步回调。这不是真正的流星限制,它只是一个JavaScript限制。

答案 1 :(得分:2)

您需要在 Meteor.call

中使用回调
Template.config.created = function() {
    Meteor.call('getValue', function(error, data) {
        if(error){
            //do stuff to handle error
        }
        console.log(data);
    });
};