所以,在我的 server.js 中,我有以下代码来限制客户端收到的内容:
Meteor.publish('customerList', function()
{
return Meteor.users.find({roles: 'customer'}, {fields: {profile: 1}});
});
我只想找到有'角色的用户。价值'客户',使用Roles包。然后在 client.js 上我在订阅中另外find()
:
Meteor.subscribe('customerList', function()
{
var foundCustomers = Meteor.users.find().fetch();
Session.set('foundCustomers', foundCustomers); //i have a Session.get elsewhere which returns this cursor
});
在我的模板中,我将这些值显示为:
<template name="customer_search_result">
{{#each customers}}
<div>{{profile.firstname}} {{profile.lastname}}, {{profile.tel}}</div>
{{/each}}
</template>
那么当我现在看到这个列表中的所有不同角色时,我做错了什么?如果我在订阅的find()
中添加与我发布的相同的规则,那么我们根本就没有结果。
答案 0 :(得分:1)
您的发布和模板看起来很好,您只需要更改您的订阅:
Meteor.subscribe('customerList');
然后你需要一个模板助手:
Template.customer_search_result.helpers({
customers: function(){
return Meteor.users.find({roles: 'customer'}, {fields: {profile: 1}});
}
})
答案 1 :(得分:1)
由于还有另一个发布employee
的出版物,您需要在订阅回调中仅从customer
获取Meteor.users
,否则您可能会得到一些employee
1}}也是。首先,将roles
添加到已发布的字段中(我认为这不是问题):
Meteor.publish('customerList', function()
{
return Meteor.users.find({roles: 'customer'}, {fields: {profile: 1, roles: 1}});
});
然后更新订阅功能:
Meteor.subscribe('customerList', function()
{
var foundCustomers = Meteor.users.find({roles: 'customer'}).fetch();
Session.set('foundCustomers', foundCustomers);
});
顺便说一句,通过fetch
光标并将结果存储在会话中,您将破坏反应性。如果这是故意的 - 您只需要一次性的客户快照 - 您应该考虑在完成后停止订阅,否则服务器将继续向客户发送从未使用过的新客户:
var customerListSubscription = Meteor.subscribe('customerList', function()
{
var foundCustomers = Meteor.users.find({roles: 'customer'}).fetch();
Session.set('foundCustomers', foundCustomers);
customerListSubscription.stop();
});
如果你想要反应,请参阅Kelly Copley的回答。