灰烬属于断言失败

马特

考虑以下两种模型:汽车和所有者

我有一个当前车主的记录(鲍勃·琼斯),还有一个拥有者详细信息的记录(鲍勃·琼斯)...地址,电话等。

在我的汽车表格(汽车模型)中,我有以下内容:

export default Model.extend({
    "owner_id": DS.belongsTo('owner'),
    "year": attr(''),
    "model": attr(''),
    "make": attr('')
})

存储在数据库端的ID为“ 12345”,与Bob Jones所有者记录相对应。

当我加载汽车记录(2015 Jaguar)时,它还将连接到Bob Jones记录,该记录会告诉我他的电话,地址等。例如,如果我打印出

{{owner_id.id}} - {{owner_id.name}}

我将展示:

12345-Bob Jones

我的问题是,如果我更换车主会怎样?如果我选择下拉列表

{{my-select
    name="owner_id"
    content=ownerList
    selection=owner_id.id
    prompt="select an owner"
    required=true
}}

从此组件:

import Ember from 'ember';

export default Ember.Component.extend({
  content: [],
  prompt: null,
  optionValuePath: 'value',
  optionLabelPath: 'label',

  init: function () {
    this._super(...arguments);
    if (!this.get('content')) {
      this.set('content', []);
    }
  },

  actions: {
    change: function () {
      let selectedIndex = this.$('select')[0].selectedIndex;
      let content = this.get('content');

      // decrement index by 1 if we have a prompt
      let hasPrompt = !!this.get('prompt');
      let contentIndex = hasPrompt ? selectedIndex - 1 : selectedIndex;
      let _selection = content[contentIndex];

      this.sendAction('willChangeAction', _selection);

      if (this.get('optionValuePath')) {
        this.set('selection', _selection[this.get('optionValuePath')]);
      } else {
        this.set('selection', _selection);
      }

      this.sendAction('didChangeAction', _selection);
    }
  }
});

并更改值...我收到此错误:

记录的ID一旦处于加载状态就无法更改

您如何更新2015年捷豹(Jaguar)的汽车记录以更改车主,并加载新车主的详细信息?

xcskier56

您正在更改所有者的ID,而不是更改owner_id美洲虎上的道具。我更改了owner_id道具以owner帮助弄清belongsTo持有什么。

我采用的一般策略是选择汽车的所有者,然后将其传递回控制器以保存汽车。

型号/car.js

export default Model.extend({
    "owner": DS.belongsTo('owner'),
    // ...
})

路线/汽车/car.js

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return Ember.RSVP.hash({
      car: this.store.find('car', params.id),
      ownerList: // however you get the owner list
    })
  }
})

控制器/汽车/ car.js

import Ember from 'ember';

export default Ember.Controller.extend({
  actions{
    ownerChanged(newOwner) {
      // If the select is setup properly, newOwner should be an instance of owner.
      const car = this.get('model.car');
      car.set('owner', newOwner);
      car.save
    }
  }
})

模板/汽车/car.hbs。

{{my-select
    name="owner"
    content=model.ownerList
    selection=model.car.owner.id
    prompt="select an owner"
    required=true
    didChangeAction='ownerChanged'
}}

路线模型挂钩中的代码大部分是为了清楚起见,如果您采用其他方法,请相应地调整名称

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章