无法在 ember 数据关系上调用保存 a
Cannot call save a on an ember-data relation
我想处理 component/form 中的关系。当我创建关系时它工作正常,但当我尝试更新时它失败了
import Ember from 'ember';
export default Ember.Component.extend({
store: Ember.inject.service(),
init(){
this._super(...arguments);
var adresseField=this.get('adresseAttributeField');
var parent=this.get('parent');
if (parent.get(adresseField).content==null) {
this.set('adresse',this.get('store').createRecord('adresse'));
}else{
this.set('adresse',parent.get(adresseField));
}
},
actions:{
saveAdresse(adresse){
console.log(adresse);
var parent=this.get('parent');
var adresseField=this.get('adresseAttributeField');
adresse.save().then(()=>{
if(parent.get(adresseField)!=adresse){
parent.set(adresseField,adresse)
parent.save()
}
}),()=>{
}
}
}
});
触发saveAdresse更新地址时报错信息:
adresse.save is not a function
创建地址时,组件工作正常。
我认为我的问题出在检索现有关系时的初始化中:
this.set('adresse',parent.get(adresseField));
但是我无法确定到底是什么问题。
这里的问题很可能是adresseField
是异步关系。对于这种关系,Ember 数据将 return 称为承诺代理对象。这样 Ember 就可以在关系解决后访问这些属性。但是,方法不是代理,因此它告诉您 adresseField
没有方法。
您需要在 .then
块中访问已解析的关系:
parent.get(adresseField).then(result => {
this.set("adresse", result);
});
问题大概出在异步关系上。您可以通过在 promise 上调用 .then
并在那里设置 属性 来解决此问题,但这可能会导致异步副作用。实际上,当您在组件中时,您希望无需进行异步调用即可使用所有数据。
如果可能的话,您最好在路线级别加载该数据,以便您知道此时它可用。
我想处理 component/form 中的关系。当我创建关系时它工作正常,但当我尝试更新时它失败了
import Ember from 'ember';
export default Ember.Component.extend({
store: Ember.inject.service(),
init(){
this._super(...arguments);
var adresseField=this.get('adresseAttributeField');
var parent=this.get('parent');
if (parent.get(adresseField).content==null) {
this.set('adresse',this.get('store').createRecord('adresse'));
}else{
this.set('adresse',parent.get(adresseField));
}
},
actions:{
saveAdresse(adresse){
console.log(adresse);
var parent=this.get('parent');
var adresseField=this.get('adresseAttributeField');
adresse.save().then(()=>{
if(parent.get(adresseField)!=adresse){
parent.set(adresseField,adresse)
parent.save()
}
}),()=>{
}
}
}
});
触发saveAdresse更新地址时报错信息:
adresse.save is not a function
创建地址时,组件工作正常。
我认为我的问题出在检索现有关系时的初始化中:
this.set('adresse',parent.get(adresseField));
但是我无法确定到底是什么问题。
这里的问题很可能是adresseField
是异步关系。对于这种关系,Ember 数据将 return 称为承诺代理对象。这样 Ember 就可以在关系解决后访问这些属性。但是,方法不是代理,因此它告诉您 adresseField
没有方法。
您需要在 .then
块中访问已解析的关系:
parent.get(adresseField).then(result => {
this.set("adresse", result);
});
问题大概出在异步关系上。您可以通过在 promise 上调用 .then
并在那里设置 属性 来解决此问题,但这可能会导致异步副作用。实际上,当您在组件中时,您希望无需进行异步调用即可使用所有数据。
如果可能的话,您最好在路线级别加载该数据,以便您知道此时它可用。