2013-02-20 41 views
8

我想在创建帖子后进行转换。在保存余烬数据模型后转换

后/新>点击提交>轨后端成功创建的帖子及回复一个JSON>重定向到新创建的职位的路径

在ember_data_example github上的源代码。他们用这种方法

transitionAfterSave: function() { 
    // when creating new records, it's necessary to wait for the record to be assigned 
    // an id before we can transition to its route (which depends on its id) 
    if (this.get('content.id')) { 
     this.transitionToRoute('contact', this.get('content')); 
    } 
}.observes('content.id'), 

它工作正常,因为该模型具有无效的ID模型创建的时候,当模型保存成功,因为这个功能观察模型ID改变其ID会改变。

但是,也许,只要模型的ID属性发生改变,该函数就会被执行。 我在找更多的语义方式。

我要当模特的状态更改为“isDirty” =假& &“是否新款” ==真表“isDirty” = TRUE,要执行 过渡“是否新款” =假。

我该如何执行此操作?

回答

20

理想情况下,id不应该改变。但是,从语义上讲,你是正确的,这种方法看起来不正确。

还有就是要做到这一点更清洁的方式:

save: function(contact) { 
    contact.one('didCreate', this, function(){ 
    this.transitionToRoute('contact', contact); 
    }); 

    this.get('store').commit(); 
} 

UPDATE 2013年11月27日(ED 1.0测试版):

save: function(contact) { 
    var self = this; 
    contact.save().then(function() { 
    self.transitionToRoute('contact', contact); 
    }); 
} 
+0

谢谢,这正是我需要的! – synthresin 2013-02-20 16:08:16

+0

感谢您的编辑建议...为什么被拒绝? – 2013-02-22 10:19:39

+0

我错过了什么吗?我有一个保存函数作为一个窗体上的操作,但传递给我的匿名函数的参数是未定义的。所以我不能调用它()。 – agmcleod 2013-04-09 19:21:28

3
actions: { 
     buttonClick: function() { 
      Ember.debug('Saving Hipster'); 
      this.get('model').save() 
       .then(function (result) { 
        this.transitionToRoute('hipster.view', result); 
       }.bind(this)); 
     } 
    } 
4

注意的灰烬2.4这是包装以处理组件或路由级别的保存操作(并避免控制器)。下面是一个例子。请注意转场中模型对象上的id。并注意我们如何在路径中使用transitionTo而不是transitionToRoute。

actions: { 
    save() { 
     var new_contact = this.modelFor('contact.new'); 
     new_contact.save().then((contact) => { 
     this.transitionTo('contact.show', contact.id); 
     }); 
    },