Ember:嵌套的findRecord调用将一个模型与另一个模型关联一次

时间:2017-12-05 13:52:44

标签: ember.js ember-data

我有两个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;
&#13;
&#13;

但是,每次在此之后运行操作时,将设置客户,然后立即取消设置,因此ID会立即显示,然后消失。 Ember检查器中的数据选项卡确认这些许可证的客户关系对数据的值为null。

updateLicense 操作中的行licenseRecord.set('code', '23412342');始终可以正常运行。为什么Ember数据会设置然后为第一个许可证以外的所有客户取消设置?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。传递到 updateLicense 操作的许可证对象可以简单地设置客户:

<强>路由/ licenses.js

  self.get('store').findRecord('customer', customerId).then(function(customer) {
    license.set('customer', customer);
    license.set('code', '23412342');
});