2013-06-03 82 views
0

所以我有我認爲是一個簡單的Ember對象。Emberjs Computed Property計算因未知原因

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

+0

哪裏屬性'clipIds'? – albertjan

+0

這看起來像屬於控制器而不是模型的代碼。 – Gevious

回答

1

雷,這應該是不同的定義。計算屬性的定義與函數一樣,當觀察到您定義的任何依賴關係發生變化時,Ember將處理調用您的函數。

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

該代碼會看一些物業叫「clipIds」(無論是),並會返回基於clipIds進行陣列上Ember.Clip對象的列表。

+0

你應該稍微解釋一下'。@ each'的用法。 – albertjan

+0

所以這個方法的問題是每次計算這個時候我都會得到一個新的剪輯數組。 – raytiley

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('[email protected]') 
});