【问题标题】:Meteor routing: how to extend RouterController?Meteor 路由:如何扩展 RouterController?
【发布时间】:2015-04-09 05:36:47
【问题描述】:

我正在阅读《发现流星》这本书,并且对分页(分页章节)有疑问。 我的 router.js 中有一个代码:

//router.js
...
PostsListController = RouteController.extend({
    template: 'postsList',
    increment: 4,
    postsLimit: function() {
        return parseInt(this.params.postsLimit) || this.increment;
    },
    findOptions: function() {
        return {sort: {submitted: -1}, limit: this.postsLimit()};
    },
    subscriptions: function() {
        this.postsSub = Meteor.subscribe('posts', this.findOptions());
    },
    posts: function() {
        return Posts.find({}, this.findOptions());
    },
    data: function() {
        var hasMore = this.posts().count() === this.postsLimit();
        var nextPath = this.route.path({postsLimit: this.postsLimit() + this.increment});
        return {
            posts: this.posts(),
            ready: this.postsSub.ready,
            nextPath: hasMore ? nextPath : null
        };
    }
});
...
Router.route('/:postsLimit?', {
    name: 'postsList'
});

这工作正常。我的问题描述:

我有另一条路线('/news'),也想为这条路线进行分页。我应该如何正确扩展 PostsListController 来实现它?

我的每个帖子都有一个标签选项,在这种情况下它是一个“新闻”,所以我只想看到带有“新闻”标签的帖子。 我试图复制粘贴这个控制器(PostsListController)并且:

renamed it;
set another template;
changed:

posts: function() {
            return Posts.find({}, this.findOptions());
        }

到:

posts: function() {
            return Posts.find({postType: 'news'}, this.findOptions());
        }

它不起作用,在我的 /page 新闻上,我只能看到我所有的新闻文章和微调器。我被添加了:

Router.route('/news/:postsLimit?', {
    name: 'newsTemplate',
    controller: NewsTemplateController
});

但是当我要去 /news/1 时,我会看到我所有的帖子(不仅仅是一个)和“显示更多”按钮。 我认为这种复制粘贴方法非常糟糕,但我不知道如何使其正常工作。

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:

    /news 显示所有帖子的第一个问题是因为您的第一个 Route 规范过于通用。

    Router.route('/:postsLimit?', {
        name: 'postsList'
    });
    

    此路由规范会将所有带有一个参数的请求发送到PostsListController

    即。所有这些路径都将路由到 PostsListsController:

    /asdf
    /test
    /news

    要解决此问题,您可能希望使第一条路线更具体:

    Router.route('/posts/:postsLimit?', {
        name: 'postsList'
    });
    

    我不确定为什么您在访问 /news/1 时会收到不止一项。
    你能发布你的那个控制器的代码吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 2014-02-09
      • 2015-09-12
      • 2011-05-11
      相关资源
      最近更新 更多