2013-02-26 57 views
2

我有一个保存事件设置与我的文章创建路线。支持的方法转换到新的对象

App.PostsNewRoute = Ember.Route.extend({ 
    model: function(){ 
    return App.Post.createRecord(); 
    }, 
    exit: function() { 
    this._super(); 
    this.get('currentModel.transaction').rollback(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    }, 
    events: { 
    save: function(post){ 
     post.one('didCreate', this, function(){ 

     this.transitionTo('posts.show', post); 
     }); 
     post.get('transaction').commit(); 
    }, 
    cancel: function(){ 
     this.transitionTo('posts.index'); 
    } 
    } 
}); 

这是我的博文模型。

App.Post = DS.Model.extend({ 
    body: DS.attr('string'), 
    headline: DS.attr('string') 
}); 

正如您所看到的,它会在创建帖子后转换到显示路径。我遇到了一个问题,因为帖子的ID是未定义的(它是在数据库中创建对象后定义的),因此转换将url更改为/ null。这似乎合乎逻辑,但显然不理想。

转换为新帖子的ID的最佳方式是什么?创建完成后,我返回整个对象(包含ID)。好像Ember似乎没有看到我要返回的新对象。

+0

你可以用你的问题创建一个jsfiddle吗? – 2013-02-27 13:46:07

+0

这很难演示,因为它与我的服务器上调用RESTful方法有部分关系。这很困难,因为我在我的服务器上创建了一个新记录。问题是我没有为该记录设置一个ID,直到我将记录提交给服务器(换句话说,Ember从来没有听说过这个ID--它是在数据库中创建的,而不是在客户端上创建的)。因此,当我转换到新记录时,该记录的ID为空,因此它在URL中显示为空。我不确定我是否以最好的方式处理这个问题。我将使用更多的路由代码更新我的帖子。 – sentinel21 2013-02-27 16:37:51

回答

2

我遇到了这个问题。 https://github.com/emberjs/data/issues/405看起来像didCreate事件在更新对象之前触发。我使用的解决方法只是为有问题的id设置一个观察者。然后didCreate会开火,当id被更新时,我的观察员开了火,在那个观察者中,我做了向show route的过渡。

相关问题