4

surveyquestion、 と呼ばれる残り火モデルがありresponseます。surveyには複数questionの があり、複数の には複数responseの があります。それぞれresponseに属性がありますcount

モデルtotal_response_countに計算値を設定するにはどうすればよいですか? surveyemberjs 1.0.0 では、questions(async: true のため) DS.PromiseArray にあるため、計算された値を返すと、値ではなくオブジェクトとしてテンプレートに表示されます。

に組み込まれているのでresponsesquestionモデルから簡単にアクセスできます。ただし、Ember は{async: true}によって参照されたものに対して自動的に promise を作成します。responsesquestionquestionssurvey

調査モデル:

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 を使用しています。

4

1 に答える 1