在查询中使用数组时,Meteor.publish不会更新客户端

时间:2012-12-19 11:10:33

标签: meteor

考虑以下代码:

Meteor.publish("Children", function (id) {
  // Find all the items that are children of an item that I am sharing
  //
  var sharing = Items.find({$and : [{_id:id},{sharing:{$elemMatch: {user_id:this.userId}}}]}).fetch();
  var shared_children = [];
  sharing.forEach(function(share){
    share.children.forEach(function(child){
      shared_children.push(child.id);
    });
  });
  return Items.find({_id:{$in : shared_children}});
});

在我的Meteor.publish中,我动态生成一个要在我的.find中使用的id数组。它适用于手动查询数据,但是当我向“共享”字段添加新元素时,只有我添加该字段的客户端才会显示更新。查看同一元素的其他客户端无法获取从服务器发送的更新值。他们只需使用minimongo数据库中已有的内容进行更新。服务器端MongoDB确实显示了新条目,但我无法在创建它的任何客户端上查询它。

问题是.find使用的是计算值数组,因此依赖系统没有再次调用我的发布事件?

1 个答案:

答案 0 :(得分:0)

一种常见的误解是Meteor的重新运行在服务器端运行。相反,典型的模式是客户端发生变化,其中有一个反应变量(如Session对象)作为订阅的参数。订阅值的更改将导致使用新参数重新调用发布。

相反,如果你想在服务器端执行此操作,则需要设置一个观察者,如counts-by-room example

所示