Issue with accessing subscriptions in Meteor

寵の児 提交于 2019-12-10 23:16:22

问题


I'm getting frustrated at an 'Exception in template helper' error in a Meteor application I'm trying to develop.

In /lib/collections.js I have:

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

In /server/main.js I have:

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

In /lib/router.js I have:

Router.configure({
    // Other stuff

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

In /client/templates/list.html I have:

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

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

In /client/templates/list.js I have:

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

My output is:

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

And in the javascript console, I get:

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
...

Now, my issue is that my publishing 'VenuesFoUser' generates the error above when trying to access its contents.

But, why!?

Edit: If I change all instances of 'VenuesForUser' to 'VenuesAndUsers' the subscription works. But how does that make sense? Can I only give names to subscriptions that match collections?


回答1:


Publications publish documents to your collections. A publication can be named random, but if it returns a cursor from a collection named NotRandom, then that's the collection they get published to on the client.

You have a publication named VenuesForUser, which returns a cursor from the collection VenuesAndUsers. On the client side, VenuesAndUsers is the collection that has the data that was published from the server. So you can only do VenuesAndUsers.find(), since there is no collection named VenuesForUser. The publication name has no effect on anything else - it's just a name. It doesn't create a new collection for you.

I hope I made it clear.




回答2:


It needs to be, not Meteor, but Mongo, such as:

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

not:

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


来源:https://stackoverflow.com/questions/33177382/issue-with-accessing-subscriptions-in-meteor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!