所以我在使用ember数据和RESTAdapter的ember.js应用程序中基本上有以下两个模型。
App.JobsController = Ember.ArrayController.extend({
completedCount: function() {
return 0; //Doesn't matter what I return here.
}.property('content.@each.state')
});
App.Job = DS.Model.extend({
transactions: DS.hasMany('App.Transaction'),
state: function() {
return 0; //Doesn't matter what I do here
}.property('transactions.@each.transactionType')
});
App.Transaction = DS.Model.extend({
job: DS.belongsTo('App.Job'),
transactionType: DS.attr('number')
});
我遇到的问题是transactions.@each.transactionType
的存在会导致以下异常:
"Attempted to handle event `becomeDirty` on <App.Transaction:ember462:1> while in state rootState.loaded.materializing.firstTime. Called with undefined"
我无法在问题队列或堆栈溢出的任何其他位置找到对此的任何引用。我做错了什么?
更新
所以我做了一些更多的调查,并且在原帖中没有说清楚。我已经更新了代码以反映它。
1)我在计算属性中做了什么并不重要。只是拥有它们会导致异常。
2)只有在有另一个取决于原始属性的计算属性时才会发生异常。 (希望有意义)
所以在上面的例子中,JobsController有一个计算属性,它基于Job模型的计算属性。
答案 0 :(得分:0)
尝试依赖于isLoaded:
state: function(){
return this.get('isLoaded') ? this.get('transactions.lastObject.transactionType') : null;
}.property('isLoaded', 'transactions.@each.transactionType')
答案 1 :(得分:0)
因为事务是一个Ember数组,你应该测试的是确定他是否有数据的长度...尝试类似:
state: function(){
var transactions = this.get('transactions');
var lastObject = transactions.get('length') > 0 ? transactions.get('lastObject') : null;
return lastObject !== null ? lastObject.get('transactionType') : null;
}.property('transactions.@each.transactionType')