覆盖模型的保存

时间:2016-03-18 13:45:36

标签: ember.js ember-data

我尝试覆盖ember-data模型的保存功能:

模型/ client.js

export default DS.Model.extend({
  billingAddress: DS.belongsTo('address'),
  //...
  save: function(...arg){
    var _this = this;
    this.get('billingAddress').then(billingAddress=>{
      return billingAddress.save().then(function(){
        return _this._super(arg);
      });
    })

  }
});

我做的其他地方

record.save().then(function(){
  // show a message
});

我收到以下错误:

  

未捕获的TypeError:无法读取未定义的属性“然后”

主要问题是从承诺中调用super不是那么直接,但是可能的

  save: function(...arg){
    let _super = this._super;
    return somePromise.then(() => _super.call(this));
  }

2 个答案:

答案 0 :(得分:1)

这确实是一种常见的模式,但我不会覆盖模型的保存方法,而是在路由/控制器的级别上处理它。

import Ember from 'ember';

const { Mixin, RSVP: { resolve } } = Ember;

Ember.Mixin.create({
  beforeSave() {
    return resolve();
  },
  save() {
    this.beforeSave().then(() => this.get('currentModel').save());
  },
  {
    actions: {
      save() {
        this.save();
      }
    }
  }
});

您可以将mixin添加到路线中,如果将其添加到控制器currentModel变为model,并覆盖beforeSave以处理您的关系,请确保您返回承诺来自beforeSave

答案 1 :(得分:0)

您的保存实施不会返回任何内容。 我想你必须返回从“_this._super(arg);”

返回的承诺
export default DS.Model.extend({
  billingAddress: DS.belongsTo('address'),
  //...
  save: function(...arg){
    var _this = this;
    return this.get('billingAddress').then(billingAddress=>{
      return billingAddress.save().then(function(){
        return _this._super(arg);
      });
    })

  }
});