【问题标题】:Meteor and subscriptions流星和订阅
【发布时间】:2012-10-01 05:53:11
【问题描述】:

我不明白Meteor.subscribe 的概念。 它应该从服务器接收记录,并将其附加到具有相同名称的集合中,对吧?

[subscribe] 将对传入的属性进行排队,直到您在客户端上使用匹配的集合名称声明 Meteor.Collection。

那么,为什么docs 中的示例使用不同的名称? allplayersplayers是什么关系?

Meteor.subscribe("allplayers");
...
// client queues incoming players records until ...
...
Players = new Meteor.Collection("players");

【问题讨论】:

  • Meteor 的默认行为可能令人困惑:启用 autopublish 智能包。 Autopublish 自动将每个集合发布到每个客户端,无需手动发布或订阅。虽然这在启动项目时很有帮助,但不建议将自动发布功能包用于生产用途。您需要在发布和订阅生效之前禁用自动发布包。
  • 这个详细的回答可能对你有帮助understand meteor subscriptions.

标签: meteor


【解决方案1】:

有两个名字:

  • 集合的名称(在本例中为'players')。
  • 订阅的名称(在本例中为'allplayers')。

订阅是一种将记录放入客户端集合的方法。记录进入的这个集合的名称(在服务器端)通过使用相关的Meteor.publish 函数中的this.set() 来决定,但通常它只是集合的名称在服务器端查询[1]。

许多订阅可以将数据存放到同一个集合中,因此订阅的名称当然不需要与集合的名称相对应。事实上,如果您正在对该集合进行相当简单的单一订阅,那么让它们保持相同可能只是一个好主意。

[1] 如果您在Meteor.publish 中返回一个光标(例如return players.find();),它自动 为您连接到this.set(name) 的调用,其中name 是从服务器推断的边players收藏。

【讨论】:

  • 似乎没有this.set()(至少现在没有了)。集合的名称是this.insert 和相关方法的参数。
  • 这里有一个与此相关的问题:stackoverflow.com/questions/27748100/…。希望解决记录与订阅的关联明显丢失的问题...
猜你喜欢
  • 2016-02-17
  • 2014-07-24
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多