我想保存一些数据并在视图模板中显示。所以我想像下面的例子那样使用方法。
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})
}
});
答案 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;
}
});
这对你有用吗?