保存余烬数据模型后的转换

时间:2013-02-20 13:50:36

标签: ember.js ember-data

我想在创建帖子后进行转换。

  

post / new>点击提交> rails后端成功创建帖子并响应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为null,并且当模型保存成功时其ID将更改,因为此函数会观察模型ID的更改。

但也许,只要模型的ID属性发生变化,就会执行此功能。 我发现了更多的语义方式。

我想要执行转换 当模型的状态变为'isDirty'= false&& 'isNew'== true form'isDirty'= true,'isNew'= false。

我该如何实现?

3 个答案:

答案 0 :(得分:20)

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

有一种更简洁的方法:

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

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

更新2013-11-27(ED 1.0测试版):

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

答案 1 :(得分:4)

Ember 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);
      });
    },

答案 2 :(得分:3)

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