我正在编写一个Web应用程序,它将动态检查DDP服务器的集合(出版物)。我遇到的问题之一是,一旦创建了Meteor集合,它就会在应用程序的整个生命周期内始终存在:

foo = new Meteor.Collection("foo");


但是,根据用户对应用程序的处理方式,我可能不再对foo感兴趣。拖延该收集会很浪费,因为最终我可能会将整个数据库存储在客户端上。

由于客户端不知道它将订阅哪些集合,这一问题变得更加严重。我认为这会导致模板助手的设置方式出现问题。到目前为止,我所看到的所有示例都显示了帮助程序仅返回特定集合的结果,例如:

return foo.find();


我仍然对反应式模型的工作方式有所了解,但是我猜测如果我重新分配foo:

foo = new Meteor.Collection("bar");


...上面的辅助代码不会神奇地更新以返回'bar'的内容。



更新:
由于建议围绕使用订阅和单个集合的组合而产生,所以我认为我会提出一些有关为什么我问这个问题的背景:


我的客户端应用程序事先对服务器的发布一无所知
服务器对客户端应用程序一无所知
应用程序必须动态发现发布(这些发布存储在应用程序将订阅的“根”集合中)
我正在使用DDP.connect连接到流星服务器之外的我们自己的DDP服务器


我正在开发的应用程序类似于PHP / Django admin,但适用于我们自己的平台(皮质)。

我可以向通过单个发布公开整个数据库的服务器添加功能,并使用订阅参数来确定发布应转发的集合。

但是,当更改订阅时,这变成了一场噩梦。取消订阅不会清除客户端minimongo集合,因此会保留先前订阅的剩余数据。客户将负责删除订阅之间的数据:

foo_sub.stop();
foo.remove({});
bar_sub = remote.subscribe('bar'); // Assuming 'bar' publishes in 'foo'

最佳答案

我相信您在条款上有些挣扎。

例如,您可以使用有关FlowRouter和基于路由的订阅的MeteorPad。

http://meteorpad.com/pad/Ba5DTe94NjFi3ZTPA/Playground_Flow-Router_Chat

至少可以快速回答您的问题:

1.)没有订阅的集合(您必须从项目中删除自动发布)在客户端上为空

2.)集合仅定义文档结构

3)如果您具有不同的文档模型(例如sql中的表),则根据项目的不同,您将使用许多集合

4.)您应该执行基于模板或路由的订阅-最好不要在整个应用程序中使用。

5.)您可以使用其他参数订阅publish方法,以便仅请求和交换一些文档。

6.)您可以在客户端上使用Col.find(),例如,如果您的发布仅发送了最后5个文档。

您应该阅读有关meteorhacks subs-manager软件包的信息,这可以减少数据/馆藏交换的数量并加快您的应用程序的速度。

您可以在sascha greif上找到有关发布订阅流星的良好在线文章。

我希望这种资源将指导您做出正确的决定。

有成功
汤姆



更新:

您可能会看到此MeteorPad,以查看用于编写自己的发布方法并将任何您喜欢的内容推送到客户端的选项。这也可能取决于通过Submit发送的参数。

http://meteorpad.com/pad/Zq4QdMW84rKGersFH/Sample_Publish_to_Local-Collection_Reactive_way

假设您不需要return Col.find(),也可以在服务器上使用Col.find()并使用其他文档进行更新。

关于javascript - 如何在运行时决定客户端将订阅哪个Meteor集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31409848/

10-15 13:20