Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
meteor.js:理解发布_Meteor_Publish Subscribe - Fatal编程技术网

meteor.js:理解发布

meteor.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

我最近开始使用Meteor,但有一件事我仍然不了解(至少不完全了解),那就是发布机制。例如,考虑下面的代码(我已经禁用了AutoPubLISBTW):

文件:client/lib.js

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(“分类”)是如何订阅的知道更新
    列表
    变量吗
我还有一个问题是关于以下代码:

文件:client/lib.js:

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