1

我有这个基本路线,我的模板没有收到我设置的数据。

App =
    subs:
        posts: Meteor.subscribe "posts"
        users: Meteor.subscribe "users"

Router.configure
    wait: [App.subs.posts, App.subs.users]
    loadingTemplate: 'loading'

Router.map ->
    @route 'post_show',
        path: '/p/:slug'
        before: ->
            if App.subs.post
                App.subs.post.stop()
            App.subs.post = Meteor.subscribe "post", @params.slug

        waitOn: ->
            App.subs.post

        after: ->
            if @getData().post
                document.title = @getData().post?.title

        data: ->
            p = Posts.findOne
                $or: [{
                    slug: @params.slug
                }, {
                    _id: @params.slug
                }]

            date = new Date p.timestamp
            date_added = "{0}-{1}-{2}".format date.getFullYear(), date.getMonth()+1, date.getDate()

            data =
                post: p
                date_added: date_added
            data
        template: 'post_show'

服务器代码:

Meteor.publish "posts", ->
    return Posts.find()

Meteor.publish "post", (id_or_slug) ->
    return Posts.find({
        $or: [{
            slug: id_or_slug
        }, {
            _id: id_or_slug
        }]
    })

Meteor.publish "userData", ->
    return Meteor.users.find {},
        fields:
            profile: 1

当我刷新页面时,方法p内的变量data未定义。任何想法为什么?

4

1 回答 1

0

看起来您在同一个后端集合(“posts”)上有两个出版物(“posts”和“post”)。据我所知,这是不可能的,因为客户端集合需要与服务器端的集合名称匹配。您发布它的名称并不重要。

这也在http://docs.meteor.com/#meteor_publish的“按房间计数”示例中进行了解释。

这就提出了一个问题,为什么您首先要发布所有帖子,然后再发布其中的一个子集。那你不能在客户端上做那个子集吗?

于 2014-01-15T17:34:36.370 回答