survey
、question
、 と呼ばれる残り火モデルがありresponse
ます。survey
には複数question
の があり、複数の には複数response
の があります。それぞれresponse
に属性がありますcount
。
モデルtotal_response_count
に計算値を設定するにはどうすればよいですか? survey
emberjs 1.0.0 では、questions
(async: true のため) DS.PromiseArray にあるため、計算された値を返すと、値ではなくオブジェクトとしてテンプレートに表示されます。
に組み込まれているのでresponses
、question
モデルから簡単にアクセスできます。ただし、Ember は{async: true}によって参照されたものに対して自動的に promise を作成します。responses
question
questions
survey
調査モデル:
App.Survey = DS.Model.extend({
title: DS.attr('string'),
owner_id: DS.belongsTo('user'),
questions: DS.hasMany('question', {async:true}),
total_responses: function() {
var question_cb = function(prevValue, item) {
return prevValue + item.get('total_responses');
};
return this.get('questions').then(function(questions){
return questions.reduce(question_cb, 0);
});
}.property('questions')
});
質問モデル:
App.Question = DS.Model.extend({
survey: DS.belongsTo('survey'),
question: DS.attr('string'),
responses: DS.hasMany('response'),
total_responses: function() {
var response_cb = function(prevValue, item) {
return prevValue + item.get('count');
};
return this.get('responses').reduce(response_cb, 0);
}.property('responses')
});
応答モデル:
App.Response = DS.Model.extend({
response: DS.attr('string'),
count: DS.attr('number'),
question: DS.belongsTo('question')
});
私は ember-1.0.0 と ember-data 1.0 beta-2 を使用しています。