2017-06-21 35 views
1

什麼是'流星' - 通過給定的ID獲取文檔標題的方式?MeteorJS:如何通過給定的ID數組通過服務器方法獲得標題數據

集(文章)

{ 
    '_id'   : 'Dn59y87PGhkJXpaiZ', 
    'title'  : 'Sample Article', 
    'slug'  : 'sample-article' 
} 

客戶

render() { 
    const data = [ 
     { _id: 'Dn59y87PGhkJXpaiZ' }, 
     { _id: 'kJXpaiZDn59y87PGh' } 
     { _id: 'y87PGhkJXpaiZDn59' } 
    ] 
    return (
     <List> 
      { 
       data.map(r => { 
        return <List.Item>r._id</List.Item> 
       }) 
      } 
    ) 
} 

有了這個,我會得到這樣的輸出:

<List> 
    <List.Item>Dn59y87PGhkJXpaiZ</List.Item> 
    <List.Item>kJXpaiZDn59y87PGh</List.Item> 
    <List.Item>y87PGhkJXpaiZDn59</List.Item> 
</List> 

現在我要顯示的標題,而不是的id。所以通常我會做

data.map(r => { 
    const title = Articles.findOne({ _id: r._id }).title 
    return <List.Item>title</List.Item> 
}) 

但問題是,data是一個動態的數據集,我不能/不想公佈完整的文章集合。目前沒有訂閱,所以我沒有得到任何結果的標題。 所以我認爲我必須做一個服務器端調用。

Meteor.call('getTitle', r._id, function(err, res) { 
    console.log(res) 
}) 

但是然後我會在回調函數中得到結果。那麼我如何將這些列入清單?另外我想避免多個方法調用。我認爲最好發送data並獲得服務器端的所有標題,然後構建列表。

+0

我使用[Sessions](https://docs.meteor.com/api/session.html)來處理該問題。 – ickyrr

回答

0

如果你能/要使用非異步調用,不回調傳遞給Meteor.call()方法:

data.map(r => { 
    const title = Meteor.call('getTitle',r._id); 
    return <List.Item>title</List.Item> 
}) 

正如docs說:

如果您未在服務器上傳遞迴調,方法調用將會阻塞,直到方法完成。它最終會返回方法的返回值,或者如果方法拋出異常,它將拋出異常。

0

要獲取並呈現數據流星的方式,您必須使用名爲react-meteor-data的包創建createContainer

例如,如果您要使用它,那麼您將能夠將它作爲道具直接傳遞給組件。

export default createContainer((props) => { 
    Meteor.subscribe('questions'); 
    return { 
    questions: Questions.findOne({_id: props.match.params.id}) 
    }; 
}, QuestionDo);