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

问题描述:

似乎我无法在助手中访问FlowRouter模板订阅。你怎么能这样做?如何访问Meteor模板助手中的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

所以,第一,这:

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

不是ser版本代码:它是客户端代码:流量路由器是客户端路由器:计数器直观,但这是所有这些路由器的基础。 这里的提示是你在'订阅'这个代码的出版物,所以它在客户端。

铁路由器在服务器和客户端都是路由选择,所以当你从那里进入时,它会变得更加混乱。

这里缺少的是服务器端的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

+0

感谢您的回复。抱歉,这个错误 - 我确实在我的服务器代码中有。我已经修改了问题 –

+0

好像你的收藏没有在客户端定义。 – MrE

+0

谢谢你可能是这个原因。我想你仍然需要在本地存储在客户端发布收集 –

集合一个订阅,你想调用你想要获取数据的实际集合,而不是th e订阅名称。在这种情况下,我认为你的意思是流星。用户:

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

谢谢。当我在帮手中这样做时,我有时会得到一个未定义的错误,即使使用警卫 –

+0

当然,我会修改代码。 –