版本升级后Ember.js数据转换

时间:2013-02-26 17:11:35

标签: ember.js ember-data

所以我正在编写一个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产生它)将非常感激。帮帮我吃蛋糕也吃。谢谢!

1 个答案:

答案 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();
  }
}