我正在编写一个Web应用程序,它将动态检查DDP服务器的集合(出版物)。我遇到的一个问题是,一旦创建了一个Meteor集合,它就会在应用程序的生命周期内坚持下去:
foo = new Meteor.Collection("foo");
但是,根据用户对应用程序的处理方式,我可能不再对foo感兴趣。让这个集合徘徊是浪费,因为我可能最终将整个数据库存储在客户端上。
由于客户端不知道要订阅哪些收藏,因此问题更加严重。我认为这会导致模板助手的设置方式出现问题。到目前为止,我见过的所有示例都显示帮助者只返回特定集合的结果,例如:
return foo.find();
我仍然关注反应模型是如何运作的,但我猜我是否会重新分配foo:
foo = new Meteor.Collection("bar");
...上面的帮助代码不会神奇地更新以返回'bar'的内容。
更新 由于建议围绕着使用订阅和单个集合的组合,我想我会给出一些关于我为什么问这个问题的背景:
我正在开发的应用程序就像PHP / Django管理员,但是对于我们自己的平台(cortex)。
我可以向通过单个发布公开整个数据库的服务器添加功能,并使用预订参数来确定发布应转发的集合。
虽然更改订阅时这会变成一场噩梦。取消订阅不会清除客户端minimongo集合,从而留下先前订阅的剩余数据。客户端将负责删除订阅之间的数据:
foo_sub.stop();
foo.remove({});
bar_sub = remote.subscribe('bar'); // Assuming 'bar' publishes in 'foo'
答案 0 :(得分:1)
我相信你对这些条款有点挣扎。
作为示例,您可以使用此MeteorPad关于FlowRouter和基于路由的订阅。
http://meteorpad.com/pad/Ba5DTe94NjFi3ZTPA/Playground_Flow-Router_Chat
至少快速回答你的问题:
1。)没有订阅的集合(您必须从项目中删除自动发布)在客户端上为空
2。)Collection只定义了一个文档结构
3。)如果您有不同的文档模型(如sql中的表),根据您的项目,您将使用多个集合
4.。)你应该做基于模板或路由的订阅 - 最好不要在应用程序范围内进行。
5.。)您可以使用其他参数订阅您的发布方法,以便只请求和交换少量文档。
6。)您可以在客户端使用Col.find(),例如,您的发布只发送最后5个文档。
您应该阅读有关meteorhacks子管理器包的信息,这会减少数据/集合交换的数量并加快您的应用程序。
你从sascha greif找到一篇关于发布订阅meteor的好文章。
我希望这个资源能引导你做出正确的决定。
取得成功 汤姆
更新:
您可以查看此MeteorPad,以查看编写自己的发布方法的选项,并将您喜欢的任何内容推送到客户端。这也可能取决于通过提交发出的论点。
http://meteorpad.com/pad/Zq4QdMW84rKGersFH/Sample_Publish_to_Local-Collection_Reactive_way
想象一下,您不需要return Col.find()
您也可以在服务器上使用Col.find()
并使用不同的文档进行更新。