灰烬:在计算的属性中未检测到模型的属性更改

时间:2018-07-12 05:13:27

标签: ember.js ember-data

我有2个模型。

models / calendar.js

export default Model.extend({
  holidays: hasMany('holiday'),
  date: attr(),
  occasion: attr()
})

models / holiday.js

export default Model.extend({
  calendar: belongsTo('calendar')
})

还有一个组件。

holidays / component.js

export default Component.extend({
  init() {
    this._super(...arguments);
    this.store.find('calendar', this.get('calendarId'))
      .then(calendar => this.set('calendar', calendar));
  },

  calendarIsDirty: computed('calendar.holidays.@each.{date,occasion}', function () {
    // This is not executed
  })
})

假日/template.hbs

{{each calendar.holidays as |holiday|}}
  {{input value=holiday.date}}
  {{input value=holiday.occasion}}
{{/each}}

{{#if calendarIsDirty}}
  <button>Save</button>
{{/if}}

我正在UI中显示假期,并且当用户编辑假期的日期或场合时,我想做些事情。但是,侦听这些更改的计算属性根本不会执行。请帮助我。

我有一个“添加假日”按钮,该按钮添加了一个空的假日,用户可以对其进行编辑。当我添加假期时,将执行该计算出的属性。仅当我对现有假期进行更改时,才会执行计算属性。

1 个答案:

答案 0 :(得分:2)

假设您假设this.store.findAll('calendar')返回一个calendar,但返回一个calendar列表,则问题很简单。

因此,this.set('calendar', calendar)calendar设置为calendar个数组。

接下来,您的依赖项密钥calendar.holidays.@each是错误的,因为calendar是一个数组,因此没有属性holidays

如果您要一个calendar,则应该执行findIdqueryRecord。如果要使用一组日历,则应相应地更改代码。但是,您需要知道foo.@each.bar.@each不是有效的依赖项密钥-这是ember的限制。您将需要解决此问题。