我有两个Ember模型,它们定义了许可证可以属于客户的关系,而客户可以拥有许多许可证:
模型/ license.js
export default DS.Model.extend({
code: DS.attr('string'),
customer: DS.belongsTo('customer'),
});

模型/ customer.js
export default DS.Model.extend({
license: DS.hasMany('license'),
});

在我的路线中,我有一个功能,可以设置许可所属的客户。我必须从Ember数据中获取相关的客户和许可证记录,因此我使用嵌套的 findRecord 调用。
路由/ license.js
updateLicense: function(license) {
var self = this;
self.get('store').findRecord('license', license.id).then(function(licenseRecord) {
self.get('store').findRecord('customer', 11).then(function(customer) {
licenseRecord.set('customer', customer);
licenseRecord.set('code', '23412342');
});
});
}

第一次运行 updateLicense 操作时,会为相关许可证记录正确设置客户。下面的HBS正确显示{{license.customer.id}}
存在的客户ID。
<td class="customer">{{license.customer.id}}<button {{action 'updateLicense'}}>Update</button></td>
&#13;
但是,每次在此之后运行操作时,将设置客户,然后立即取消设置,因此ID会立即显示,然后消失。 Ember检查器中的数据选项卡确认这些许可证的客户关系对数据的值为null。
updateLicense 操作中的行licenseRecord.set('code', '23412342');
始终可以正常运行。为什么Ember数据会设置然后为第一个许可证以外的所有客户取消设置?
答案 0 :(得分:0)
我找到了解决方法。传递到 updateLicense 操作的许可证对象可以简单地设置客户:
<强>路由/ licenses.js 强>
self.get('store').findRecord('customer', customerId).then(function(customer) {
license.set('customer', customer);
license.set('code', '23412342');
});