2015-03-30 78 views
0

我有困難與Meteor.call回調的工作。我定義了一個從服務器端檢索值的函數;但是,它不會將它們返回到模板,以便通過{{#each}}循環對它們進行循環。Meteor.call()回調沒有返回值模板

下面是函數:

search: function() { 
    Meteor.call('mySearchFunction', arg1, function(err, res) { 
    if (err) console.log(err); 
    else if(res) { 
     console.log(res); 
     return res; 
    } 
    }); 
} 

console.log(res)讓我發現我所需要的數據,這是與mySearchFunction正確牽強,但我不能把它傳遞給模板處理器,儘管它是一個數組這可能會被迭代。所以,我試過如下:

search: function() { 
    var s = Meteor.call('mySearchFunction', arg1, function(err, res) { 
    if (err) console.log(err); 
    else if(res) { 
     console.log(res); 
     return res; 
    } 
    }); 
    console.log(s); 
    return s; 
} 

而且console.log(res)繼續顯示必要的數據,但console.log(s)顯示爲undefined。我認爲這是因爲在res得到機會被評估服務器端之前流星的異步性質返回s。無論哪種方式,奇怪的是我無法從輔助函數中存儲的幫助器中返回數據。

回答

3

在客戶端上,Meteor.call是異步的 - 它返回undefined,它的返回值只能通過回調訪問。另一方面,助手同步執行。有關如何從助手調用方法,請參閱this question的答案。這裏有一個快速的解決方案:

$ meteor add simple:reactive-method 
Template.showPost.helpers({ 
    search: function() { 
    arg = Session.get('currentSearch'); 
    return ReactiveMethod.call('mySearchFunction', arg); 
    } 
}); 

我不知道什麼是arg1在你原來的職位,所以我使用一個會話變量在我的解決方案,但應該讓你在正確的軌道上。

這個包的問題是,它可以鼓勵不良行爲,但它應該是罰款不改變狀態(如搜索)方法調用。

也看到有關this post助手的部分。

+0

ARG1只是一個字符串,不知道是否有差別,我想你的解決方案現在...... – nmac 2015-03-30 21:34:26

+0

我解決了從您提到的問題的回答我的問題。 +1。 – nmac 2015-03-30 21:39:26