我正在编写一个 Web 应用程序,它将动态检查 DDP 服务器的集合(发布)。我遇到的一个问题是,一旦创建了 Meteor 集合,它就会在应用程序的整个生命周期内一直存在:
foo = new Meteor.Collection("foo");
但是,根据用户对应用程序所做的操作,我可能不再对 foo.txt 感兴趣。让这个集合徘徊会很浪费,因为我最终可能会将整个数据库存储在客户端上。
由于客户端不知道它将订阅哪些集合,这个问题变得更糟。我认为这会导致模板助手的设置方式出现问题。到目前为止,我看到的所有示例都显示助手仅返回特定集合的结果,例如:
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'