我正在尝试在meteor中实现以下模式:服务器具有一些数据集,这些数据集作为较小的块发布到客户端,即客户端订阅数据的子集。
//server
Meteor.publish("dataWindow", function(){
//publish a subset
return Data.find({},{limit:100};});
});
//client
Meteor.subscribe("dataWindow", function onReady(){
//do stuff with dataWindow, but this doesn't work
//display(dataWindow)
});
但是,在客户端上使用此实现时,dataWindow为空。
我不明白的一些事情:
onReady
(formerly onComplete
)中引用dataWindow?答案 0 :(得分:3)
我建议阅读meteor book以更好地了解流星的基本概念。我还建议您查看文档的publish and subscribe部分。如果对发布和订阅没有基本的了解,你可能很难理解你的问题的答案,但我会试一试:
因为它们在服务器和客户端之间共享,所以将定义放在应用程序目录下的目录中,例如: /collections/posts.js
。
Posts = new Meteor.Collection("posts");
我将在本答案的其余部分假设您的收集是Posts
,因为Data
有点过于通用。因此,您的发布功能可能如下所示:
Meteor.publish("postsForDashboard", function(){
return Posts.find({}, {limit: 100});
});
您的订阅可能如下:
Meteor.subscribe("postsForDashboard");
没有。发布函数的名称(在我们的示例中为postsForDashboard
)只是一个标识符。文档将使用(Posts
)中找到的相同集合发布到客户端。这也回答了你的第一个问题。
你没有。它只是用于选择发布功能的标识符。在我们的示例中,您可以这样做:
console.log(Posts.find().fetch());
请注意,直接使用回调进行订阅是很不寻常的。典型的用例是简单地订阅数据,然后在模板中使用它。
铁路由器是一种客户端路由器,当您希望在应用中拥有多条路由时(例如/ dashboard,/ posts,/ posts / abc123 / edit)非常有用。铁路由器的一个很好的功能是它可以等待您的数据准备就绪并相应地显示模板。例如,当您的帖子同步时,它可以显示一个微调器,当它们完成时,它可以显示一个显示它们的模板。同样,您不需要直接访问subscribe的回调以实现此目的。
我希望这会有所帮助,但我强烈建议您阅读以上资料,以便更好地了解这一切是如何运作的。