2013-12-12 199 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函數不能很好地完成這項工作嗎?

道歉,如果我誤解了你想在這裏實現的目標。