如何在Meteor模板助手中访问FlowRouter订阅?

时间:2016-03-05 15:53:25

标签: meteor meteor-blaze flow-router

好像我无法在我的助手中访问FlowRouter模板订阅。你怎么能这样做?

在我的服务器代码中:

Meteor.publish('AllUsers', function() {
    return Meteor.users.find({}, {fields: {profile: 1}});
})

在我的路由器代码中:

var userRoutes = FlowRouter.group({
    subscriptions: function(params, queryParams) {
        this.register('AllUsers', Meteor.subscribe('AllUsers'));
    },
});

在我的模板代码中:

{{#if checkFlowRouterSubs}}
    {{#each getTheUsers}}
        {{>userPartial}}
    {{/each}}
{{/if}}

在我的助手中,我有'后卫':

checkFlowRouterSubs: function() {
    if (FlowRouter.subsReady()) {
        return true;
    };
    return false;
},

然后是getTheUsers助手:

...
var users = AllUsers.find(filterObject, { sort: { 'profile.firstname': 1 } }).fetch(); // the actual query definitely works
...

但是我收到了一个错误:

Exception in template helper: ReferenceError: AllUsers is not defined

我应该注意,在getTheUsers帮助器中,FlowRouter.subsReady('AllUsers')返回true

2 个答案:

答案 0 :(得分:1)

所以,首先,这个:

var userRoutes = FlowRouter.group({
    subscriptions: function(params, queryParams) {
        this.register('AllUsers', Meteor.subscribe('AllUsers'));
    },
});

不是服务器代码:它是客户端代码:Flow-router是客户端路由器:计数器直观,但这是所有这些路由器的基础。 这里的暗示是你正在订阅'到本代码中的出版物,因此它在客户端。

Iron-Router在服务器和客户端都进行路由,因此当你从那里来时会让事情变得更加混乱。

这里缺少的是服务器端的publish功能。

Meteor.publish('AllUsers', function() {
    return AllUsers.find();
});

编辑:

错误

Exception in template helper: ReferenceError: AllUsers is not defined 似乎是因为你没有在客户端定义集合

var AllUsers = Mongo.Collection('AllUsers'); //or whatever the actual collection

答案 1 :(得分:0)

当您尝试从订阅中获取数据时,您希望调用您想要获取数据的实际集合,而不是订阅名称。在这种情况下,我认为你的意思是Meteor.users:

var users = Meteor.users.find(filterObject, { sort: { 'profile.firstname': 1 } });
if( users ) {
  return users.fetch();
}