2013-12-12 245 views
2

我有一个服务器端定义的Meteor.method(在/服务器中的.js中),我可以从客户端模板脚本中调用它很好(带回调)。 我想做一个类似的事情,但希望这一切都是客户端,所以我将该方法移动到客户端脚本,但结果返回为'未定义'。流星客户端方法

Template.showDialog.events({ 
    'click #clickme' : function() { 
     Meteor.call('foo', 'ola', function(error, result) { 
      alert('here'); 
      alert(result); 
      }); 
     } 
}); 

Meteor.methods({ 
    foo: function (myarg) { 
     return myarg+'CLI'; 
    } 
}); 
+0

感谢您的参与,两者都非常有用,但我给出了最容易理解的答案。我其实并没有意识到我可以使用普通的javascript,并且认为我仅限于'Meteor.call'来进行函数调用。 –

回答

8

Meteor docs,其中解释在客户端上的方法是存根,而不是实际的方法:

如果你定义一个存根,当客户端调用服务器的方法,它也将并行运行它的存根。 在客户端上,存根的返回值被忽略。存根会因其副作用而运行:它们旨在模拟服务器方法的结果,但不会等待往返延迟。如果存根引发异常,它将被记录到控制台。

由于结果被忽略,因此您会看到undefined。为此,不要在客户端使用方法。只需使用JavaScript功能即可。

+1

我已经阅读了文档,看到了有关存根的位,我有点不明白。您已经以我现在看到发生的事情的方式描述了它 - 谢谢。 –

+0

是的,在React组件或Blaze模板中使用纯Javascript功能 – soulmachine

2

从文档:

调用客户端上methods定义具有相同名称的服务器方法相关联的存根功能。

基本上,您需要定义服务器端的方法。目前还不清楚为什么你想在客户端定义一个方法,然后在客户端调用它。香草JavaScript函数不能很好地完成这项工作吗?

道歉,如果我误解了你想在这里实现的目标。