基于父集合中的子节点的计算属性

时间:2014-09-08 20:45:50

标签: javascript ember.js

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

我有一个控件,其属性是对象(父对象)的集合,每个父对象都有一个对象集合(子对象)。例如,每本书都有一系列章节的书籍集合。

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

如何将计算属性基于添加到任何父对象子集合的子对象?

1 个答案:

答案 0 :(得分:3)

使用computed属性创建一个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