8

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

发布/新建 > 点击提交 > 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 时执行转换。

我该如何实施?

4

3 回答 3

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);
  });
}
于 2013-02-20T14:46:53.880 回答
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);
      });
    },
于 2016-04-11T01:49:12.013 回答
3
    actions: {
        buttonClick: function () {
            Ember.debug('Saving Hipster');
            this.get('model').save()
                .then(function (result) {
                    this.transitionToRoute('hipster.view', result);
                }.bind(this));
        }
    }
于 2013-10-12T22:15:05.347 回答