【发布时间】:2017-05-26 23:49:43
【问题描述】:
我是 Meteor 的新手。我天真地认为服务器上的“发布”会将集合的集合/子集发送给客户端到同步的 minimongo 集合中,但更重要的是,订阅的客户端只能处理 那个 已发布的数据集(不多也不少)。但是,在模板助手中订阅时,它看起来像:
1) 你不能使用“发布”的名称(那它有什么用呢?)
2)您必须查询集合并再次进行过滤(为什么还要在“发布”中进行过滤?)
代码如下:
meteor:PRIMARY> db.products.insertMany([
... { "name" : "product_1", "color" : "black", "taste" : "salty" } ,
... { "name" : "product_2", "color" : "black", "taste" : "sweet" } ,
... { "name" : "product_3", "color" : "white", "taste" : "salty" } ,
... { "name" : "product_4", "color" : "white", "taste" : "sweet" } ])
模板:
<template name="products">
<h2> All of them:</h2>
{{#each allOfThem}}
<li>
{{name}} {{color}} {{taste}}
</li>
{{/each}}
<h2> salty ones:</h2>
{{#each saltyOnes}}
<li>
{{name}} {{color}} {{taste}}
</li>
{{/each}}
</template>
在 main.js - 服务器:
Meteor.startup(() => {
Meteor.publish('saltyProducts', function(){
return Products.find( { taste : "salty"} );
});
});
在 main.js - 客户端:
Template.products.onCreated( function() {
Meteor.subscribe("saltyProducts");
});
Template.products.helpers({
allOfThem: function(){
return Products.find( {});
},
saltyOnes: function(){
return Products.find( { taste : "salty"} );
}
});
结果:
All of them, instead of my subscription..
product_1 black salty
product_2 black sweet
product_3 white salty
product_4 white sweet
salty ones, but I had to filter in the helper..
product_1 black salty
product_3 white salty
当然,我尝试过这样做:return saltyProducts.find( {} );,但这不起作用。同样,定义“saltyProducts”出版物的意义何在?
【问题讨论】:
-
你是否关闭了自动发布包?因为如果这是您在服务器上拥有的唯一出版物,那么除非启用了自动发布包,否则您不应该获得所有产品,而只是获得您发布的咸味产品。
-
非常感谢 Artus,你让我开心!
-
但是还有一个小问题:我给出版物起的名字“saltyProducts”有什么用? (因为在客户端/模板/助手中,我仍然必须订阅“产品”,它现在代表缩减集)
-
@Jalmince,我更新了我的答案来帮助你回答这个问题。
-
@Jalmince
saltyProducts是您的出版物的名称。就像数据集的标识符一样,您将从.publish()方法返回。它是供您参考的,例如您在致电.subscribe()时想要接收哪个数据集
标签: meteor subscription