基于父集合中的子对象计算的属性

computed property based on children within a collection of parents

本文关键字:对象 计算 属性 集合 于父      更新时间:2023-09-26

我有一个jsbin来说明我的问题:http://emberjs.jsbin.com/xuperezacuha/1/

我有一个控制器,它的属性是对象(父对象)的集合,每个父对象都有一个对象(子对象)集合。例如,一本书的集合,其中每本书都有一个章节的集合。

从jsbin:我在索引控制器上有一个名为allChapters的计算属性,当向任何父级添加新章节时,它不会重新计算。

如何以添加到任何父对象子集合的子对象为计算属性的基础?

创建一个具有计算属性的ember对象,并将子对象封装在该对象中。

App.Book = Em.Object.extend({
  chapterLength: Em.computed.alias('chapters.length')
});

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return [
      App.Book.create({name: 'red', chapters: []}),
      App.Book.create({name: 'blue', chapters: []}),
      App.Book.create({name: 'yellow', chapters: []})
    ];
  }
});

然后观看计算属性

 allChapters: function() {
    _ret = []
    this.get('model').forEach(function(book) {
      book.get('chapters').forEach(function(chapter) {
         _ret.pushObject(chapter);
      })
    })
    return _ret;
  }.property('model.@each.chapterLength'),

http://jsbin.com/xuperezacuha/4/edit