我有一个模型公司和一个模型地址。 company.address
属于地址。因此,当我获取公司记录model(params) {return this.store.findRecord('company', params.companyID);}
时,我可以使用model.address.street
访问地址属性。但是当我的后端重新执行地址:null因为公司dosnt与地址有关系,我希望用户可以通过输入字段设置街道,我得到错误Assertion Failed: Cannot delegate set('street', a) to the 'content' property of object proxy <(subclass of Ember.ObjectProxy):ember1458>: its 'content' is undefined."
以下是具有null关系的json:
{"data": {
"attributes": {"name": "test-company"}, "id": "5",
"relationships": {
"address": {
"data": null
}
},
"type": "companies"
}
}
那我怎么能避免这个错误呢?如果有公司记录,我可以在获取公司记录后证明model.address,但是在每条路线上这样做都不是很聪明。
答案 0 :(得分:0)
首先,您的路由模型挂钩应确保组织具有有效的余烬数据记录的地址。如果没有,那么创建一个空的。
model: function(params) {
const store = this.get('store');
return Ember.RSVP.hash({
org: store.findRecord('orgnanization', params.id).then(org => {
org.get('address').then(address => {
if(Ember.isNone(address)) {
org.set('address', store.createRecrord('organization.address', {});
}
})
}),
});
},
现在您的输入可以直接绑定到organization.address.street,因为它现在始终与ember-data记录相关。
{{input type="text" value=model.org.address.street}}
编辑时你首先需要保存地址记录,所以它会有一个id,然后保存原始组织。
editOrganization: function() {
const org = this.get('model.org')
const saveAddressPromise = org.get('address').then(address => {
return Ember.isPresent(address.get('street')) ? address.save() : EMPTY_PROMISE(null);
}); // If street is present save the address, other wise send empty promise that resolves to null
return saveAddressPromise.then(address => {
if(Ember.isNone(address) {
org.set('address', null); // The street is not present still. dont save address record
}
return org.save();
}).catch(sendError).finally(doSomething);
}
另一种方法是每次都保存一个空记录,然后你就不会有这个.street检查。
铌! Empty_promise代码示例
return new Ember.RSVP.Promise(function(resolve, reject) {
resolve(value);
});