2017-12-01 6 views
0

私は流星と反応しています。これが機能している1番目のwithTrackerクエリからIDを取得し、2番目のwithTrackerクエリに渡しますか? (流星/流星)

export default withTracker(props => { 
    let eventsSub = Meteor.subscribe('events'); 
    return { 
    event: Events.find({ _id: props.match.params.event }).fetch(), 
    }; 
})(Event); 

が、私は今、別のコレクションと呼ばれるグループからデータを取得する必要があります。私のイベントへイム通過データをURLから取得withTrackerとコンポーネント、およびIDを反応します。難しいのは、すでに復帰しているイベントからIDを取得する必要があるということです。

以下のコードはハードコード1のときに機能します.1は実際には動的で、イベントクエリーからのフィールドリターンから来る必要があります。

export default withTracker(props => { 
    let eventsSub = Meteor.subscribe('events'); 
    let groupsSub = Meteor.subscribe('groups'); 
    return { 
    event: Events.find({ _id: props.match.params.event }).fetch(), 
    group: Groups.find({ id: 1 }).fetch(), 
    }; 
})(Event); 
+0

'event'にキー 'id'が含まれていますか? –

答えて

1

(イベントサブスクリプションがまだロードされている場合など)eventが定義されていないとき、それはエラーになりますが、それが動作するはずのように見えます。

単一のドキュメントをお探しの場合は.find().fetch()の代わりに.findone()を使用できます。 _idで検索している場合でも、最初のパラメータとして直接使用できます。あなたはまた、任意のサブスクリプションのloading状態でwithTracker()提供する必要があります:パフォーマンスのPOVから別の問題があります

export default withTracker(props => { 
    const eventsSub = Meteor.subscribe('events'); 
    const groupsSub = Meteor.subscribe('groups'); 
    const loading = !(eventsSub.ready() && groupsSub.ready()); 
    const event = Events.findOne(props.match.params.event); 
    const group = event ? Groups.findOne(event.id) : undefined; 
    return { 
    loading, 
    event, 
    group, 
    }; 
})(Event); 

2つのサブスクリプションにはパラメータがありません。それらのサブスクリプションの読み込み速度を遅くする必要がある以上に多くのドキュメントを返す可能性があります。 eventパラメータをパブリケーションに渡して、イベントとグループの両方を含む配列を返します。

export default withTracker(props => { 
    const oneEventSub = Meteor.subscribe('oneEventAndMatchingGroup',props.match.params.event); 
    const loading = !oneEventSub.ready(); 
    const event = Events.findOne(props.match.params.event); 
    const group = event ? Groups.findOne(event.id) : undefined; 
    return { 
    loading, 
    event, 
    group, 
    }; 
})(Event); 

サーバ上oneEventAndMatchingGroup出版:出版物は、したがってカーソルここ.find()の使用のカーソル又は配列を返す必要があること

Meteor.publish(`oneEventAndMatchingGroup`,function(id){ 
    check(id,String); 
    const e = Events.findOne(id); 
    return [ Events.find(id), Groups.find(e.id) ]; 
}); 

注意。

0

それはeventオブジェクトのフィールドがGroups.findに供給すべき非常に明確ではありません。しかし、私はその質問に答えようとします。このライン

export default withTracker(props => { 
    let eventsSub = Meteor.subscribe('events'); 
    let groupsSub = Meteor.subscribe('groups'); 
    event = Events.find({ _id: props.match.params.event }).fetch(); 
    return { 
    event, 
    group: Groups.find({ id: event['id'] }).fetch(), 
    }; 
})(Event); 

注 - -

group: Groups.find({ id: event['id'] }).fetch(), 

はあなたが必要とするどのフィールドを使用するように変更することができ

はこのようなものを使用してみてください。ヤセルの答え@

group: Groups.find({ id: event['whichever field'] }).fetch(), 
関連する問題