Node.js如何重新发布数据。

时间:2013-04-15 06:59:05

标签: node.js meteor

我们已经基于列表ID发布了项目,我们使用myLists变量来过滤掉List Id,但是这个变量本质上不是被动的,当我们尝试添加新列表时,新列表的项目不会自动发布

Meteor.publish('subscription_items', function () {
var userName = this.userId ? Meteor.users.find({ _id: this.userId }).fetch()[0].username : null;

var myLists = [];
var sharedListIDs = [];
SharedLists.find({ shared_with: userName }).forEach(function (list) {
    sharedListIDs.push(list.list_id);
});

Lists.find({ $or: [{ owner: userName }, { _id: { $in: sharedListIDs } }] }).forEach(function (list) {
    myLists.push(list._id);
});

return Items.find({ list_id: { $in: Lists.find({ $or: [{ owner: userName }, { _id: { $in: sharedListIDs } }] }).fetch() } });.

我们能否始终发布新数据?请帮我解决这个问题。任何帮助/建议都会很感激。

1 个答案:

答案 0 :(得分:0)

正如David Weldon this answer在我的类似问题中指出的那样,您正在寻找的是反应性加入。通过使用包publish-with-relations,我认为您想要的发布功能看起来像这样:

Meteor.publish('subscription_items', function() {
  return Meteor.publishWithRelations({
    handle: this,
    collection: Lists,
    filter: {owner: this.userId},
    mappings: [{collection: SharedLists, key: 'list_id'}]
  });
});

或者,作为(脏)变通方法,您可以调用

Meteor.subscribe('subscription_items');

您需要重新发布该集合的任何地方。