meteor.js:理解发布
我最近开始使用Meteor,但有一件事我仍然不了解(至少不完全了解),那就是发布机制。例如,考虑下面的代码(我已经禁用了AutoPubLISBTW): 文件:client/lib.jsmeteor.js:理解发布,meteor,publish-subscribe,Meteor,Publish Subscribe,我最近开始使用Meteor,但有一件事我仍然不了解(至少不完全了解),那就是发布机制。例如,考虑下面的代码(我已经禁用了AutoPubLISBTW): 文件:client/lib.js var lists = new Meteor.Collection('List'); Meteor.subscribe("Categories"); Template.categories.lists = function () { return lists.find({}, {sort: {Cate
var lists = new Meteor.Collection('List');
Meteor.subscribe("Categories");
Template.categories.lists = function () {
return lists.find({}, {sort: {Category: 1}});
};
文件:server/lib.js:
var lists = new Meteor.Collection('List');
Meteor.publish("Categories", function() {
return lists.find({},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
2个问题:
- 我是否应该在每个文件中定义
集合列表
- Meteor.subscribe(“分类”)是如何订阅的代码>知道更新
变量吗列表
Meteor.autosubscribe(function() {
Meteor.subscribe("listdetails", Session.get('current_list'));
});
文件:server/lib.js:
var lists = new Meteor.Collection('List');
Meteor.publish("Categories", function() {
return lists.find({},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
我假设当发布listdetails
时,新列表会从Session
推送到current\u list
。我不明白你为什么不能就这么做
Meteor.subscribe("listdetails", Session.get('current_list'));
此外,我注意到现在您应该使用Deps
(依赖项)对象。有人能用Deps
帮我翻译一下这个例子吗
谢谢
我应该在每个文件中定义列表集合吗
否,多次评估新Meteor.Collection(“”)(使用相同的
)会显示错误已存在名为“”
的集合。只计算一次并将其存储在全局变量中
流星如何订阅(“分类”);知道如何更新列表
变量
它只是知道怎么做。作为一个使用Meteor的普通程序员,您不需要知道如何使用Meteor。至少我不会告诉你怎么做,但这不是秘密:整个框架都可以在github上获得,如果你感兴趣的话,只要检查那里的代码就可以了
我还有一个问题是关于以下代码:
您可以只使用Meteor.subscribe(“listdetails”,Session.get(“current_list”),但订阅将只使用当前获取的值Session.get('current_list')
get。利用
Deps.autorun(函数(){
Meteor.subscribe(“列表细节”,Session.get(“当前列表”);
});代码>
相反,每次Session.get('current_list')
更改时(当计算Session.set('current_list'))
时,都会重新创建订阅
您应该使用的是Deps.autorun
,Meteor.autorun
和Meteor.autosubscribe
已停用
我应该在每个文件中定义列表集合吗
否,多次评估新Meteor.Collection(“”)
(使用相同的
)会显示错误已存在名为“”
的集合。只计算一次并将其存储在全局变量中
流星如何订阅(“分类”);知道如何更新列表
变量
它只是知道怎么做。作为一个使用Meteor的普通程序员,您不需要知道如何使用Meteor。至少我不会告诉你怎么做,但这不是秘密:整个框架都可以在github上获得,如果你感兴趣的话,只要检查那里的代码就可以了
我还有一个问题是关于以下代码:
您可以只使用Meteor.subscribe(“listdetails”,Session.get(“current_list”),但订阅将只使用当前获取的值Session.get('current_list')
get。利用
Deps.autorun(函数(){
Meteor.subscribe(“列表细节”,Session.get(“当前列表”);
});代码>
相反,每次Session.get('current_list')
更改时(当计算Session.set('current_list'))
时,都会重新创建订阅
您应该使用的是Deps.autorun
,Meteor.autorun
和Meteor.autosubscribe
已停用
我应该在每个文件中定义列表集合吗
不可以。事实上,您不能在客户机上两次定义同一个集合,您将得到一个错误(可能在服务器上也是如此,我不记得了)。您要做的是将其定义为一个全局变量。为此,请在定义时删除var
关键字。使用var
定义的变量是您定义它们的文件的本地变量,没有它的变量是全局变量
还要注意,不详的约定是用大写字母命名集合,用小写字母命名订阅,因此您可能希望将代码更新为列表
和类别
,以提高可读性
流星如何订阅(“分类”);知道更新列表变量吗
从通道中的该集合返回游标,并将游标传递到客户端上的相应集合。请注意,重要的不是变量名,而是调用new Meteor.Collection
时传递的参数
有人能翻译
您发布的示例已过时。不再有Meteor.autorun
函数,取而代之的是Deps.autorun
。这就是你案件中需要的所有翻译。您可以阅读有关DEP及其工作原理的信息
我不明白你为什么不能简单地做
这将使用会话变量的当前值作为参数调用订阅一次。如果希望在值更改时重新运行订阅,则需要在称为“反应上下文”的内容中调用(有关详细信息,请参阅Deps文档)。实现这一点的默认方法是将调用放在Deps.autorun
方法中。当您这样做时,每次会话变量中的值更改时,订阅都会更新,这是您使用会话的主要原因
我应该在每个文件中定义列表集合吗
不可以。事实上,您不能在客户机上两次定义同一个集合,您将得到一个错误(可能在服务器上也是如此,我不记得了)。您要做的是将其定义为一个全局变量。为此,请在定义时删除var
关键字。用var
定义的变量是您定义它们的文件的本地变量,va