2017-04-04 73 views
0

一直以來,與我的Meteor + ReactJS應用程序,我想要MainCollection和SubCollection之間的反應聯接。 PublishComposite可能就是我需要的。但是,SubCollection更新時,這不是反應!在流星+ 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

在您的例子SubCollection.findOne()它裏面用transform處理程序之前,而不是在createContainer第一個參數是沒有反應。試試這個:

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()這是相關的子集合反應的數據源。