2017-02-09 129 views
0

隨着流星(1.4.2.3)和React,我有收集Objects其中有一個itemId它是指收集Items流星反應發佈合併集合

目前我訂閱集合在客戶端有:

export default createContainer(() => { 
    let objectsSub = Meteor.subscribe('allObjects'); 
    var objects = Objects.find({}, { 
     transform: function (doc) { 
     doc.item = Items.findOne({ 
      _id: doc.itemId 
     }); 
     return doc; 
     } 
    }).fetch(); 
    return { 
    objects: objects, 
    } 
}, App); 

這完美的作品,但我認爲這是更優雅的合併在服務器端的集合。然而,沒有我找到了解決方案,似乎工作

變換的集合定義

的控制檯提供:

Error: transform must return object

變換在發佈

if (Meteor.isServer) { 
    Meteor.publish('allObjects', function() { 
    return Objects.find({}, { 
     sort: { startedAt: -1 }, 
     transform: function (doc) { 
     doc.item = Items.findOne({ 
      _id: doc.itemId 
     }); 
     return doc; 
     } 
    }); 
    }); 
}; 

TypeError: Cannot read property 'name' of undefined

nameItems

+1

看一看https://github.com/englue/meteor-publish-composite – chazsolo

+0

@chazsolo:我試過了,但孩子們沒有訂閱收藏。我認爲這是一個正在運行的問題:https://github.com/englue/meteor-publish-composite/issues/67 – API

回答

0

屬性我通常做在發佈這樣的:

Meteor.publish('allObjects', function() { 
    let cursor = Objects.find({}, { 
     sort: { startedAt: -1 }); 
    }); 

    let transformData = (fields) => { 
     fields.item = Items.findOne({ 
      _id: fields.itemId 
     }); 

     return fields; 
    }; 

    let handle = cursor.observeChanges({ 
     added: (id, fields) => { 
      fields = transformData(fields); 
      this.added('objects', id, fields); 
     }, 
     changed: (id, fields) => { 
      fields = transformData(fields); 
      this.changed('objects', id, fields); 
     }, 
     removed: (id) => { 
      this.removed('objects', id); 
     } 
    }); 

    this.ready(); 

    this.onStop(() => { 
     handle.stop(); 
    }); 
    }