我最近开始使用Meteor,有一件事我还是不了解(至少不完全是)发布机制。例如,请考虑以下代码(我已禁用autopublish btw):
file:client / lib.js
var lists = new Meteor.Collection('List');
Meteor.subscribe("Categories");
Template.categories.lists = function () {
return lists.find({}, {sort: {Category: 1}});
};
file:server / lib.js:
var lists = new Meteor.Collection('List');
Meteor.publish("Categories", function() {
return lists.find({},{fields:{Category:1}});
});
2个问题:
lists
集合吗?Meteor.subscribe("Categories");
如何知道更新lists
变量?我的其他问题是关于以下代码:
file:client / lib.js:
Meteor.autosubscribe(function() {
Meteor.subscribe("listdetails", Session.get('current_list'));
});
file:server / lib.js:
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
我认为发布listdetails
后,新列表会从current_list
推送到Session
。我不明白为什么你不能简单地做
Meteor.subscribe("listdetails", Session.get('current_list'));
此外,我注意到这些天您应该使用Deps
(依赖关系)对象。有人可以使用Deps
为我翻译此示例吗?
谢谢!
答案 0 :(得分:2)
我应该在每个文件中定义列表集合吗?
不,多次评估new Meteor.Collection('<name>')
(使用相同的<name>
)会出现错误There is already a collection named '<name>'
。仅评估一次并将其存储在全局变量中。
Meteor.subscribe(“类别”)如何;知道更新列表 变量?
它只是知道如何。作为使用Meteor的普通程序员,您不需要知道如何使用。至少我不会告诉你怎么做,但这已经不是什么秘密了:整个框架都可以在github上找到,如果你有兴趣,可以查看那里的代码。
我的其他问题是关于以下代码:
您可以使用Meteor.subscribe("listdetails", Session.get('current_list'));
,但订阅只会使用此时获得的值Session.get('current_list')
。通过使用
Deps.autorun(function() {
Meteor.subscribe("listdetails", Session.get('current_list'));
});
相反,每次Session.get('current_list')
更改(评估Session.set('current_list', <new-value>)
时)都会重新创建订阅。
您应该使用Deps.autorun
,Meteor.autorun
和Meteor.autosubscribe
已退役。
答案 1 :(得分:2)
我应该在每个文件中定义列表集合吗?
没有。实际上,您无法在客户端上定义两次相同的集合,您将收到错误(可能在服务器上也是如此,我不记得了)。您要做的是将其定义为全局变量。为此,请在定义时删除var
关键字。使用var
定义的变量是您定义它们的文件的本地变量,没有它的变量是全局变量。
另请注意,不公平的约定是使用大写字母命名集合,使用小字母订阅,因此您可能希望将代码更新为Lists
和categories
以提高可读性。
Meteor.subscribe(“类别”)如何;知道更新列表变量吗?
您从通道中的该集合返回游标,并将光标传递到客户端上的相应集合。请注意,重要的不是变量名,而是调用new Meteor.Collection
时传递的参数。
有人可以翻译......
您发布的示例已过时。不再有Meteor.autorun
函数,而是名为Deps.autorun
。这就是您需要的所有翻译。您可以阅读有关Deps及其工作原理in the documentation。
我不明白为什么你不能简单地做...
这将使用Session变量的当前值作为参数调用一次订阅。如果您希望订阅在值更改时重新运行,则需要调用称为“反应式上下文”的内容(有关详细信息,请参阅Deps文档)。实现此目的的默认方法是将您的调用放在Deps.autorun
方法中。执行此操作时,每次Session变量中的值发生更改时,都会更新订阅 - 这是您使用Session的主要原因。