我的路由有什么问题

时间:2015-04-06 15:19:25

标签: meteor iron-router

我尝试将我的路线http://localhost:3000/posts/id更改为http://localhost:3000/posts/title但是在更改来自' _id'的router.js中的参数时到标题'我得到空页。

我有一个表现良好的表格:

Template.addpost.events({
    'submit form': function(e) {
        e.preventDefault();
        var query = {
            title: $(e.target).find('[name=title]').val(),
            text: $(e.target).find('[name=text]').val() ,
            image: $(e.target).find('[name=image]').val(),
            intro: $(e.target).find('[name=intro]').val(),
            friendlyTitle: slugify($(e.target).find('[name=title]').val()),
            author: Meteor.user().profile.name
        };
        query._id = Posts.insert(query);
        Router.go('index');
    }
  });

我的router.js:

Router.configure({
  layoutTemplate: 'layout',
  loadingTemplate: 'loading',
  waitOn: function() { return Meteor.subscribe('posts'); }

});

    Router.map(function() {
      this.route('index', {path: '/'});
      this.route('addpost', {path: '/add'});
      this.route('postPage', {
            path: '/posts/:friendlyTitle', //empty page with friendlyTitle, but with _id working good
            data: function() { console.log(this.params.friendlyTitle);return Posts.findOne(this.params.friendlyTitle); //same, with _id working good}

        });
    });
    Router.onBeforeAction('loading');

postPage.html:

<template name="postPage">
    <div class="container main">
        <div class="col-md-12"><h1>{{title}}</h1></div>
        <div class="col-md-12">
            {{{text}}}
        </div>
    </div>
</template>

1 个答案:

答案 0 :(得分:2)

您需要指定查询条件。

你有这个。

return Posts.findOne(this.params.friendlyTitle);

改变这一点。

return Posts.findOne({title:this.params.friendlyTitle});

如果不是,则this.params.friendlyTitle会像_id一样将Router.route('/posts/title', { name: 'postPage', waitOn:function(){ return Meteor.subscribe('posts'); //or use the new subscritionReady }, data: function() { console.log(this.params.title) console.log(Posts.findOne({title:this.params.title});) return Posts.findOne({title:this.params.title}); } }); 返回并返回空查询

路线更干净*

将路线更改为此。

Router.map

使用Router.map(function () { this.route('postPage', { path: '/posts/:title', waitOn:function(){ return Meteor.subscribe('posts'); //or use the new subscritionReady }, data: function(){ return Posts.findOne({title:this.params.title}); } }); });

Router.map

对每条路线使用différentesRouter.route或{{1}}。