Emberjs计算属性根据未知原因计算

时间:2013-06-03 19:06:38

标签: ember.js

所以我认为这是一个简单的Ember对象。

App.Playlist = Ember.Model.extend({
  _clips: [],
  clips: function() {
    var self = this;  
    if(this.get('clipIds')) {
      this.get('clipIds').forEach(function(id) {
        self.get('_clips').addObject({});
      }
    }
  }.property('clipIds')
});

问题是剪辑计算属性被无限调用,直到它引发异常Uncaught RangeError: Maximum call stack size exceeded

2 个答案:

答案 0 :(得分:1)

Ray,这应该以不同的方式定义。计算属性的定义与函数类似,当Ember观察到您定义的任何依赖项的更改时,它将处理调用函数。

App.Playlist = Ember.Model.extend({
  myComputed: function () {
    return this.get('clipIds').map(function (id) {
      return Ember.Clip.create({id: id});
    });
  }.property('clipIds.@each'),
});

这段代码会看一些名为“clipIds”的属性(无论是什么),并会根据clipIds数组返回一个Ember.Clip对象列表。

答案 1 :(得分:0)

所以这就是我现在最终解决这个问题的方法。仍然不确定为什么重复调用计算属性。

App.Playlist = Ember.Model.extend({
  clips: [],
  loadClips: function() {
    var self = this;  
    if(this.get('clipIds')) {
      this.get('clipIds').forEach(function(id) {
        self.get('clips').addObject({});
      }
    }
  }.observes('clipIds.@each')
});