0

所以我有一个我认为是简单的 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')
});

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

4

2 回答 2

1

雷,这应该有不同的定义。计算属性的定义类似于函数,当 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 对象的列表。

于 2013-06-03T19:14:28.707 回答
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')
});
于 2013-06-03T19:27:44.343 回答