0

返回值正在控制台中打印。但它不显示在模板中

我的模板

<template name="Mytemplate">
<ul>
   {{#each Name}}
      <li>{{this}}</li> //No display
   {{/each}}
</ul>
</template>

js

Template.Mytemplate.helpers({
  Name : function(){
    Meteor.call("getnNames", function(error, result) {
      if(error){
        alert("Oops!!! Something went wrong!");
        return;
      }else{
       console.log(result); // Got result in array ["john","smith"]
       return result;
      }
    });
  }

});

我的回报是对的吗?或怎么做?

4

3 回答 3

0

AMeteor.call不返回模板内的任何内容。在call函数内部,您返回结果,但调用本身不会返回任何内容。

来自流星文档

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

但是,您可以将 放入result变量中Session并以反应方式返回。

于 2015-05-06T14:04:17.243 回答
0

因为方法调用是异步的,所以无法知道返回值何时真正返回。这意味着帮助程序通常会在您的方法调用之前完成。您必须了解在客户端上运行 Meteor.call 是非阻塞的,因此您的助手将继续执行并在返回值从服务器返回之前结束。可能您以错误的方式解决问题,但正如其他人所说,您可能做的最好的事情是不要从帮助程序返回,而是将其插入反应数据源,如反应变量、会话甚至客户端集合,然后从其他地方被动地访问它。

于 2015-05-07T00:52:09.477 回答
-1

客户端上的方法调用是异步的,您不能从异步函数返回值。解决方案是使用反应变量Session

Template.Mytemplate.helpers({
  Name: function() {    
    Meteor.call("getnNames", function(error, result) {
      if (error) {
        alert("Oops!!! Something went wrong!");
      } else {
        console.log(result); // Got result in array ["john","smith"]
        Session.set('names', result);
      }
    });
    return Session.get('names');
  }
});
于 2015-05-06T14:36:32.283 回答