我尝试覆盖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));
}
答案 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);
});
})
}
});