【问题标题】:change collection before publishing发布前更改集合
【发布时间】:2013-12-20 02:10:16
【问题描述】:

我想为发布到客户端的对象添加一个属性。

我的发布功能是这样的

Meteor.publish("forms", function() {
  return Forms.find();
});

我想做这样的事情

Meteor.publish("forms", function() {
  var forms = Forms.find();
  forms.forEach(function (form) {
     form.nbForms = 12;
  }

  return forms;
});

我希望forms 中的所有文档都有一个新的count 属性,该属性会发送给客户端。

但这显然行不通。

感谢您的帮助

【问题讨论】:

  • 为什么需要在服务器上发生这种情况?为什么不获取客户端上的所有文档,然后将该属性添加到每个文档中?
  • 因为可能有数千个。目标是一次只发布一页,但仍显示现有文档的总数。而且存储计数没有意义,因为每个用户根据他们的权限有不同的视图。因此,如果我要将计数存储在数据库中,它将在所有会话中更新。哪个是错的

标签: meteor


【解决方案1】:

不确定它是否适用于您的情况,但您可以使用 Meteor 0.5.8 引入的新转换集合功能

在声明你的集合时,添加这个函数作为第二个参数:

Forms = new Meteor.Collection("forms", {
     transform: function(f) {
         f.nbForms = 12;
         return f;
     }
});

但这将在服务器和客户端上。我不知道是否有办法在发布上下文中定义转换函数。

【讨论】:

  • 这有帮助,但这并不是我想要的。目标是在客户端上有一个不同的对象。问题是我需要对每个用户进行计数,因为结果取决于权限
  • @DrGorb 为什么不把它分成 2 个订阅?
  • 这将是更改客户端结果的下一个最佳选择
  • transform的问题是它也在客户端执行,数据在客户端不可用
【解决方案2】:

我认为您需要在 Publish 中执行类似于此流星计数示例的操作: How does the messages-count example in Meteor docs work?

我还在这里发布了一个问题,一旦得到回答可能会有所帮助。 Meteor 有一个 this.add 可能有用,但我目前不确定如何使用它。因此下面的问题: Meteor, One to Many Relationship & add field only to client side collection in Publish?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多