2017-06-21 11 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()メソッドへのコールバックを渡さない:docsに述べたように

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

サーバー上でコールバックを渡さないと、メソッドの呼び出しはメソッドが完了するまでブロックされます。メソッドの戻り値を最終的に返します。または、メソッドが例外をスローした場合は例外をスローします。

0

react-meteor-dataというパッケージを使用してcreateContainerを作成する必要があります。データ流星をフェッチしてレンダリングするには、react-meteor-dataというパッケージを使用する必要があります。

たとえば、それを使用する場合は、コンポーネントに直接小道具として渡すことができます。

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