在通过方法保存时,如何进行客户端路由?

时间:2016-04-25 14:03:53

标签: meteor

我想保存一些数据并在视图模板中显示。所以我想像下面的例子那样使用方法。

Template.postSubmit.events({
  'submit form': function(e) {
    e.preventDefault();

    var post = {
      url: $(e.target).find('[name=url]').val(),
      title: $(e.target).find('[name=title]').val()
    };

    post._id = Posts.insert(post);
    Router.go('postPage', post);
  }
});

我试过了:

'insertClubData': function(clubname, capacity, description, homepage){
    var currentUserId = Meteor.userId();
    var club = {
        clubname: clubname,
        description: description,
        capacity: parseInt(capacity),
        homepage: homepage,
        createdAt: new Date(),
        visitors: 0,
        occupancy: 0,
        trend: "club-1",
        createdBy: currentUserId
    }

    club._id = clubs.insert(club);
    Router.go('club', club);
}, 

但是我收到了错误:

  

调用方法'insertClubData'TypeError:Object时发生异常   功能路由器(req,res,next){I20160425-14:04:55.724(2)? // XXX

     

这假设我们应该在父堆栈上没有其他路由器   可能修复

我理解这是因为Router.go是客户端方法。但我也明白你应该避免服务器端路由。那么最优雅的解决方案是什么?

这是我的路线:

Router.route('/club/:_id', {
    name: 'club',
    template: 'club',
    data: function(){
        return clubs.findOne({_id: this.params._id})
    }
});

1 个答案:

答案 0 :(得分:1)

怎么样,你从客户端调用method并在回调成功时进行路由。例如:

Template.postSubmit.events({
  'submit form': function(e) {
    e.preventDefault();

    var post = {
      url: $(e.target).find('[name=url]').val(),
      title: $(e.target).find('[name=title]').val()
    };

    Meteor.call('insertPost', post, function(error, id) {
      if (error) {
        alert(error)
      } else {
        Router.go('postPage',  {_id: id});
      }
    });
  }
});

并在服务器上

Meteor.methods({
  insertPost: function(post) {
    // do checks
    id = Posts.insert(post);
    return id;
  }
});

这对你有用吗?