我目前将我的出版物存储在/server/publications.js
中。我想将我的客户端订阅存储在一个中心文件中,就像在/client/subscriptions.js
中一样。这是一个很好的设计决定还是比专业人士更有利?感谢
答案 0 :(得分:4)
您可以订阅Meteor集合的三个主要位置。
在此方法中,您可以在客户端的某个位置的文件中创建订阅。与您的示例一样,subscriptions.js
是大多数人的名字。只要它在client
文件夹中,就可以了。
Meteor.subscribe("posts");
这方面的优秀候选人是您将在所有或大部分模板上玩的集合。一个类似于Facebook的朋友列表,某种类型的提要。
如果您使用的是铁路由器或流路由器,您可以根据URL订阅集合。我最喜欢这种方法。它很灵活,但对性能却不太费力。例如:
// Inside lib/router.js
FlowRouter.route('/blog/:postId', {
subscriptions: function(params) {
this.register('myPost', Meteor.subscribe('blogPost', params.postId));
}
});
现在,您可以使用myPost
访问所需的数据。非常整洁,您可以根据需要订阅任意数量的东西。
如果您有多个模板,这是最灵活的,也是最费力的。老实说,只是避免这种方法,因为它的工作太多了。有90%的时间我发现自己使用路由器订阅。
Template.posts.onCreated(function () {
// will re-run when the "limit" reactive variables changes
instance.autorun(function () {
// get the limit
var limit = instance.limit.get();
console.log("Asking for "+limit+" posts…")
// subscribe to the posts publication
var subscription = instance.subscribe('posts', limit);
// if subscription is ready, set limit to newLimit
if (subscription.ready()) {
console.log("> Received "+limit+" posts. \n\n")
instance.loaded.set(limit);
} else {
console.log("> Subscription is not ready yet. \n\n");
}
});
});
答案 1 :(得分:1)
如果您只想要全局的,自动激活的订阅,我想您可以。对于一些有意义的小应用程序。随着代码复杂性的增加,您可能希望对订阅进行更细粒度的控制。一般来说,您有三个用于在您的应用中放置订阅的模式(按粒度和控制顺序):
虽然社区最近爱上了模板订阅,但我并不准备做出一般性的建议,即他们总是要走的路。当您向上移动订阅层次结构时,您将失去一些控制权,但也会获得可重用性。
让我们举一个简单的例子 - 想象一下你有一个社交应用程序,你有一个朋友列表。假设大多数路线和模板都假设您的恶魔的用户数据存在。如果每个模板或路由对此列表进行相同的订阅,则最终会导致大量重复,并且可能会导致大量不必要的启动和停止(这会转换为服务器负载和网络带宽)。另一方面,如果你让你的朋友成为全球订阅者,那么这些性能陷阱本可以避免。
答案 2 :(得分:0)
尽可能尝试使用基于模板的订阅。在这种情况下,如果您有/client/templates/home.html
,则可以在/client/templates/home.js
中添加与该模板相关的订阅。
Template.home.onCreated(function() {
this.subscribe('somePublication');
});
答案 3 :(得分:0)
根据我的经验,管理订阅的更好方法是使用the template subscription pattern模式
摘自参考文献:
(\d{2}:\d{2}:\d{2}\.\d+)\s+(\S+)\s+(?:(F=\d+)\s+)?(?:(\[[^]]*\])\s+)?(?:(\S+)\s+)?((?:\/[^\/\n]*)*\/\S+)(?:\s+(\d\.\d+))?\s*(.*)