Ответ 1
Следующее должно сделать это. Может быть более сжатое решение, использующее сокращение, но я никогда не использовал его сам: -)
App.List = DS.Model.extend({
name: DS.attr('string'),
users: DS.hasMany('App.User'),
tweetsUnread: function(){
var users = this.get("users");
var ret = 0;
users.forEach(function(user){
ret += users.get("tweetsUnread");
});
return ret;
}.property("[email protected]")
});
Обновление: Это более элегантное решение, использующее сокращение. Я никогда не использовал его, и это не проверено, но я уверен, что это должно работать:
App.List = DS.Model.extend({
name: DS.attr('string'),
users: DS.hasMany('App.User'),
tweetsUnread: function(){
var users = this.get("users");
return users.reduce(0, function(previousValue, user){
return previousValue + users.get("tweetsUnread");
});
}.property("[email protected]")
});
В Ember 1.1 API для уменьшения изменился! спасибо @joelcox для подсказки, что параметры initialValue и callback изменили свое положение. Итак, вот верная версия кода:
App.List = DS.Model.extend({
name: DS.attr('string'),
users: DS.hasMany('App.User'),
tweetsUnread: function(){
var users = this.get("users");
return users.reduce(function(previousValue, user){
return previousValue + user.get("tweetsUnread");
}, 0);
}.property("[email protected]")
});