Meteor:插入项目后不会重新运行发布功能

时间:2014-12-27 04:51:14

标签: meteor

我有一个具有以下发布功能的流星应用程序(使用coffeescript):

Meteor.publish "apps",  ->
  apps = Apps.find {},
    fields :
      name : 1
      description : 1
      icon : 1
  fileIds = []
  apps.forEach (doc, idx, cursor) ->
    if (doc.icon)
      fileIds.push(doc.icon)
  console.log(fileIds)
  files = Files.find {_id : { $in : fileIds}}
  [apps, files] 

注意我有一个console.log来检查发布函数何时运行。 我将一个元素插入到收集应用程序后。我没有看到重新运行发布功能。对我来说问题是,Apps集合包含一个字段图标,它是Files集合中项目的_id(使用CollectionFS)。当我将项目插入应用程序时,上传文件并将项目插入到文件集合中。但是,由于不重新运行发布功能,因此新创建的File项不会发布到客户端,因此客户端无法查看该文件。

这是什么问题?

感谢。

1 个答案:

答案 0 :(得分:0)

当您在发布方法中执行的查询可用的文档发生更改时,不会重新运行发布方法。

您将两个变量返回到发布方法apps& files。这两个现在是游标。

当光标添加了新文档时,它会将新文档中继到客户端。请注意,这意味着查询保持不变,当第一次运行该方法时,{_id : { $in : fileIds}将保留原始fileIds

重新运行发布方法时有一个例外:当用户登录或注销时。

查看代码,您希望更改一个查询,具体取决于其他更改的时间。为此,您可能需要使用另一个范例来发布,例如使用publish-with-relations包:https://atmospherejs.com/cottz/publish-with-relations