我怎样才能添加temp。字段到Meteor发布

时间:2014-01-15 01:45:59

标签: javascript meteor

有没有办法在发布函数内的服务器上添加临时额外字段?我似乎无法观察或改造工作。

我有两个订阅相同的集合'列表'。有时我想订阅某些列表,因此它们可用于聊天室列表......但问题是它们出现在我的“列表”模板中。唯一的部分在服务器上用于性能(大型阵列)。

理想情况下,我希望我可以添加一个额外的字段,例如'forChat:true',这样我就可以在列表模板中检查它,并且只提取没有'forChat'字段的列表。

目前我正在通过发送'喜欢'和&每个列表中的'disliked'数组,因此列表模板可以检查用户的id是否在其中。然而,由于长度为〜=(用户/ 2),这将无法随着时间(以及在移动设备上)很好地扩展。

// ideal-ish pseudo code if we could return arrays:

Meteor.publish('chats', function(id) {
    lists = Listings.find(...).fetch();

    return lists.map(function(list){
        return list.forChat = true;
    });
});

这甚至可能吗?有点hacky,但我想我可以将字段添加到每个列表中,并在其余的出版物上省略它。

以下接受答案的工作代码:

Meteor.publish('listingsForChats', function(id) {
    var cursor = Listings.find(...);

    // insert a temp `forChats:true` field to filter in listings template
    cursor.forEach(function(doc) {
      doc.forChats = true;
      this.added('listings', doc._id, doc);
    }, this);

    this.ready(); 
});

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。请在此处查看我的回答:How to 'transform' data returned via a Meteor.publish?

它基本上归结为流星文档中发布的扩展示例:http://docs.meteor.com/#meteor_publish