我有以下型号,客户:
App.Customer = DS.Model.extend({
//Other Attributes
area: DS.belongsTo('area', {async: true})
});
和区域模型 -
App.Area = DS.Model.extend({
name: DS.attr('string'),
zip_code: DS.attr('number')
});
我使用Ember.Select视图显示客户所在区域的下拉列表 -
{{view Ember.Select viewName="select_area" content=possible_areas optionValuePath="content.id" optionLabelPath="content.name" value=area.id prompt="No area selected" selectionBinding="selected_area"}}
和将所有东西连接在一起的控制器 -
App.CustomerController = Ember.ObjectController.extend({
possible_areas: function() {
return this.store.find('area');
}.property(),
selected_area: null,
actions: {
save: function() {
var selected_area_id = this.get('selected_area.id');
console.log(selected_area_id);
var selected_area = this.store.find('area', selected_area_id);
var self = this;
selected_area.then(function(area) {
console.log(area.get('id'));
var updated_customer = self.get('model');
updated_customer.set('area', area );
console.log(new_customer.get('area.id'));
updated_customer.save()
.then(function(customer) {
//success
},
function() {
//failure
});
});
}
}
});
现在这是奇怪的事情。在致电“保存”后第一次操作时,行updated_customer.set('area', area );
失败并显示错误
Uncaught Error: Assertion Failed: Cannot delegate set('id', ) to the 'content' property of object proxy <DS.PromiseObject:ember551>: its 'content' is undefined.
致电&#39;保存&#39;在此之后立即执行操作,保存通过而没有任何错误,并且客户的区域已成功更新。虽然下拉列表显示selected_area为空。
如何防止第一次保存错误输出?
我使用的是ember-data 1.0.0-beta.6。
答案 0 :(得分:2)
由于您在Customer
模型中定义了关联,因此我会从控制器中删除selected_area
属性,而是使用ember-data的关联。使用Ember.Select
属性绑定到selectionBinding
中的“区域”关联。
{{view Ember.Select viewName="select_area"
content=possible_areas
optionValuePath="content.id"
optionLabelPath="content.name"
prompt="No area selected"
selectionBinding="area"}}
这样,当用户与选择菜单进行交互时,area
属性将会改变。
由于我们直接绑定save
的{{1}}关联,因此可以清理area
行动。
Customer
但是,当App.CustomerController = Ember.ObjectController.extend({
possible_areas: function() {
return this.store.find('area');
},
actions: {
save: function() {
this.get('model').save().then(this.onDidCreate.bind(this), this.onDidFail.bind(this))
}
onDidCreate: function() {
// Fullfilled callback
}
onDidFail: function() {
// Rejected callback
}
}
});
返回承诺时,模板首次呈现时不会填充possible_areas
属性。我会等待呈现选择,直到承诺结算。您可以在路由this.get('area')
挂钩中执行此操作,因为它等待承诺结算以呈现模板。
model