2

所以我正在编写一个 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 路由不会产生任何输出。(请注意,当我第一次以正确的格式访问 URL 时,显示输出确实会产生输出,而不是当我从编辑路由转换到它时)。

App.PostsShowRoute = Em.Route.extend({
  model: function(params){
    return App.Post.find(params.id);
  },
  setupController: function(controller, model){
    controller.set('content', model);
  }
});

所以我很困惑。对此问题的原因的任何见解(以及如果您知道 RC 产生它的原因)将不胜感激。帮我把蛋糕也吃掉。谢谢!

4

1 回答 1

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();
  }
}
于 2013-02-26T18:13:06.810 回答