2017-04-04 5 views
0

これは本当に長い間苦労してきました。私のMeteor + ReactJSアプリケーションでは、MainCollectionとSubCollectionの間に反応的な結合が必要です。そして、PublishCompositeは私が必要とするものかもしれません。ただし、SubCollectionが更新されると、これは反応しません!Meteor + ReactJSで反応的な結合を作成する

流星と反応する反応的なサーバー側の参加方法を知っている人はいますか?

サーバコード

import { publishComposite } from 'meteor/reywood:publish-composite'; 
Meteor.MainCollection('maincollection.pub.all', { 
    find: function() { 
    return MainCollection.find(); 
    }, 
    children: [ 
    { 
     find: function (doc) { 
     return SubCollection.find(
      { mainCollectionId: doc._id }, 
      { 
      sort: { createdAt: -1 }, limit: 1, 
      fields: { 
       completedAt: 1, 
       mainCollectionId: 1, 
      } 
      }) 
     } 
    } 
    ] 
}); 

クライアントコンテナ

export default createContainer(() => { 
    let mainCollectionSub = Meteor.subscribe('maincollection.pub.all'); 
    options = { 
    transform: function (doc) { 
     doc.subcollection = SubCollection.findOne({ 
     mainCollectionId: doc._id },).fetch(); 
     return doc; 
    } 
    } 
    var maincollection = MainCollection.find({}, options).fetch(); 
    return { 
    maincollection: MainCollection.find({}, options).fetch(), 
    } 
}, MainCollectionView); 

答えて

0

あなたの例では、それはむしろcreateContainerの最初の引数に比べtransformハンドラ内で使用される前SubCollection.findOne()が反応しません。これを試してみてください:

export default createContainer(() => { 
    let mainCollectionSub = Meteor.subscribe('maincollection.pub.all'); 
    options = { 
    transform: function (doc) { 
     doc.getSubCollection = function() { 
     return SubCollection.findOne({ 
      mainCollectionId: this._id, 
     }); 
     }; 
     return doc; 
    } 
    } 
    return { 
    maincollection: MainCollection.find({}, options).fetch(), 
    subcollections: SubCollection.find().fetch(), 
    }; 
}, MainCollectionView); 

その後、あなたは、関連するサブコレクションのための反応性のデータソースであるdoc.getSubCollection()を呼び出すことができます。

関連する問題