【发布时间】:2015-10-03 06:43:53
【问题描述】:
我正在编写一个 Web 应用程序,它将动态检查 DDP 服务器的集合(发布)。我遇到的一个问题是,一旦创建了 Meteor 集合,它就会在应用程序的整个生命周期内一直存在:
foo = new Meteor.Collection("foo");
但是,根据用户对应用程序的操作,我可能不再对 foo.h 感兴趣。让这个集合徘徊会很浪费,因为我最终可能会将整个数据库存储在客户端上。
由于客户端不知道它将订阅哪些集合,问题变得更糟。我认为这会导致模板助手的设置方式出现问题。到目前为止,我看到的所有示例都显示助手只返回特定集合的结果,例如:
return foo.find();
我仍然对反应式模型的工作原理有所了解,但我猜如果我要重新分配 foo:
foo = new Meteor.Collection("bar");
...上面的帮助代码不会神奇地更新以返回“bar”的内容。
更新: 由于建议围绕使用订阅和单个集合的组合,我想我会给出一些背景信息来说明我为什么要问这个问题:
- 我的客户端应用程序事先对服务器的发布一无所知
- 服务器对客户端应用一无所知
- 应用程序必须动态发现发布(这些发布存储在应用将订阅的“根”集合中)
- 除了 Meteor 服务器之外,我还使用 DDP.connect 连接到我们自己的 DDP 服务器
我正在开发的应用程序类似于 PHP/Django admin,但用于我们自己的平台(皮质)。
我可以向服务器添加功能,通过单个发布公开整个数据库,并使用订阅参数来确定发布应该转发哪些集合。
但在更改订阅时,这会变成一场噩梦。取消订阅不会清除客户端 minimongo 集合,因此会留下先前订阅的剩余数据。客户端将负责删除订阅之间的数据:
foo_sub.stop();
foo.remove({});
bar_sub = remote.subscribe('bar'); // Assuming 'bar' publishes in 'foo'
【问题讨论】:
-
你用什么做路由器?
-
我没有使用路由器(至少不是有意识的)。
-
另一位用户在下面提供了一个有用的答案。我问你是否使用路由器的原因是你可以根据你当前使用的路由来定义你的订阅。就像您可以根据登录的用户定义订阅一样。
-
@thatgibbyguy 谢谢,但是我需要即时创建和删除 Meteor 集合。我想创建一个通用 Web 应用程序,可以监视任何(皮质)DDP 服务器的集合。这意味着我不知道我可以期待哪些系列。
标签: javascript dynamic meteor ddp