在Meteor中访问订阅的问题

时间:2015-10-16 18:35:15

标签: javascript meteor subscriptions

我对我正在尝试开发的Meteor应用程序中的'模板帮助程序中的异常'错误感到沮丧。

在/lib/collections.js中我有:

Categories = new Meteor.Collection("categories");
Venues = new Meteor.Collection("venues");
VenuesAndUsers = new Meteor.Collection("venuesAndUsers");

在/server/main.js我有:

Meteor.publish("Categories", function () {
    return Categories.find({}, {sort: {order: 1}});
});
Meteor.publish("Venues", function () {
    return Venues.find();
});
Meteor.publish("VenuesForUser", function () {
    return VenuesAndUsers.find();
});

在/lib/router.js我有:

Router.configure({
    // Other stuff

    waitOn: function() {
        return [
            Meteor.subscribe('Categories'),
            Meteor.subscribe('Venues'),
            Meteor.subscribe('VenuesForUser'),
        ];
    }
});

在/client/templates/list.html中我有:

{{#each xzz}}
    {{name}} - {{id}}<br />
{{/each}}

{{#each venues}}
    {{venueId}} - {{userId}}<br />
{{/each}}

在/client/templates/list.js我有:

venues: function() {
    return VenuesForUser.find();
},
xzz: function() {
    return Venues.find();
}

我的输出是:

Venue 1 - Venue 1 id
Venue 2 - Venue 2 id
...

在javascript控制台中,我得到:

Exception in template helper: .venues@http://localhost:3000/app/client/templates/list.js?2a82ae373ca11b4e9e171649f881c6ab1f8ed69b:11:7
bindDataContext/<@http://localhost:3000/packages/blaze.js?695c7798b7f4eebed3f8ce0cbb17c21748ff8ba8:2994:14
...

现在,我的问题是我的发布'VenuesFoUser'在尝试访问其内容时会产生上述错误。

但是,为什么!?

编辑:如果我将'VenuesForUser'的所有实例更改为'VenuesAndUsers',则订阅有效。但这有什么意义呢?我是否只能为与集合匹配的订阅提供名称?

2 个答案:

答案 0 :(得分:3)

出版物将文档发布到您的馆藏。发布可以命名为random,但如果它从名为NotRandom的集合中返回一个游标,那么它们将在客户端上发布到该集合。

您有一个名为VenuesForUser的发布,它从集合VenuesAndUsers返回一个游标。在客户端,VenuesAndUsers是具有从服务器发布的数据的集合。因此,您只能VenuesAndUsers.find(),因为没有名为VenuesForUser的集合。出版物名称对其他任何内容都没有影响 - 它只是一个名称。它不会为您创建新的集合。

我希望我说清楚。

答案 1 :(得分:1)

它必须是,而不是Meteor,而是Mongo,例如:

Platypi = new Mongo.Collection('platypi');

Platypi = new Meteor.Collection('platypi');