流星铁路由器没有加载数据

时间:2014-01-15 11:27:04

标签: meteor iron-router

我已经有了这条基本路线,而且我的模板没有收到我正在设置的数据。

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变量未定义。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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