如何让Meteor.Call返回模板的值?

rs7*_*s77 41 callback meteor

我试图理解这个关于这个概念的帖子,但是,我没有得到它.我有以下简单的设置:

/server/test.js
Meteor.methods({ 
  abc: function() {
    var result = {};
    result.foo = "Hello ";
    result.bar = "World!";
    return result;
  }
});

/client/myapp.js
var q = Meteor.call('abc');
console.log(q);
Run Code Online (Sandbox Code Playgroud)

此结构返回到控制台undefined.

如果我将myapp.js文件更改为:

Meteor.call('abc', function(err, data) {
  !err ? console.log(data) : console.log(err);
}
Run Code Online (Sandbox Code Playgroud)

我收到了Object我的控制台.

理想情况下,这是我希望能够做到的,但它不起作用,在控制台中说明: Cannot read property 'greeting' of undefined

/client/myapp.js
var q = Meteor.call('abc');

Template.hello.greeting = function() {
   return q.foo;
}
Run Code Online (Sandbox Code Playgroud)

将数据从服务器对象传递到模板的任何帮助将不胜感激.我还在学习JavaScript和Meteor.

谢谢!

Tam*_*man 77

Meteor.call文档:

在客户端上,如果您没有传递回调并且您不在存根中,则调用将返回undefined,并且您将无法获取该方法的返回值.这是因为客户端没有光纤,因此实际上没有任何方法可以阻止远程执行方法.

所以,你会想这样做:

Meteor.call('abc', function(err, data) {
  if (err)
    console.log(err);

  Session.set('q', data);
});

Template.hello.greeting = function() {
  return Session.get('q').foo;
};
Run Code Online (Sandbox Code Playgroud)

一旦数据可用,这将反应性地更新模板.

  • 这个答案不再是真的吗?我用回调调用我的方法,它总是返回一个结果`undefined`.它也没有错误,我已经检查过了. (2认同)