所以我正在编写一个POC应用程序,在将我的Ember库升级到RC1之后,我遇到了一个问题。我注意到当我转换到新版本的路线时,该对象的字符串化版本似乎显示在URL中,就像这样......
http://localhost:3000/posts/<App.Post:ember269:511401b8c589137c34000001>
当转换到这样的路线时,路线成功运行,但显然第二次尝试访问这样的URL将无效。所以我想我会编辑我的代码以转换到ID。
对于我的编辑路线,我有以下保存事件。
events: {
save: function(post){
post.one('didUpdate', this, function(){
this.transitionTo('posts.show', post);
});
post.get('transaction').commit();
}
}
当转换发生时,这会产生类似上面的URL。所以我纠正了以下内容......
events: {
save: function(post){
post.one('didUpdate', this, function(){
this.transitionTo('posts.show', post.id);
});
post.get('transaction').commit();
}
}
这会生成正确的URL格式,但show route不会产生任何输出。 (请注意,当我首次访问具有正确格式的URL 时,show输出DOES会产生输出,而不是当我从编辑路径过渡时。)< / p>
App.PostsShowRoute = Em.Route.extend({
model: function(params){
return App.Post.find(params.id);
},
setupController: function(controller, model){
controller.set('content', model);
}
});
所以我很困惑。任何洞察这个问题的原因(如果你知道为什么RC产生它)将非常感激。帮帮我吃蛋糕也吃。谢谢!
答案 0 :(得分:3)
从App.PostsShowRoute
我可以猜到你设置了这样的路线映射:
App.Router.map(function() {
this.resource('posts', function() {
this.route('show', { path:'/:id' });
});
});
您需要将:id
更改为:post_id
:
App.Router.map(function() {
this.resource('posts', function() {
this.route('show', { path:'/:post_id' });
});
});
现在,由于您使用的是Ember约定,您可以通过删除整个App.PostsShowRoute = Em.Route.extend ...
来利用它,因为Ember可以为您处理它。
并使用您的第一种方法:
events: {
save: function(post){
post.one('didUpdate', this, function(){
this.transitionTo('posts.show', post);
});
post.get('transaction').commit();
}
}