2017-07-27 10 views
2

約束の価値を返そうとしています。 Emberの複数の約束がテンプレートで解決されない

は、状況を説明するには、次の4つのモデルがある - 学生グループでは は、各客観ため得点しています。

私は、の目的をというグループに渡しました。次に、コンポーネントは、各学生のスコアをそのの目的に照会し、平均を返します。

コードは動作しているようですが、console.logsは私が望むものを最終的に私に与えてくれますが、約束はテンプレートに解決されません。私は{object Object}を取得します未解決の約束。

ここで何か不足していますか?複数の約束が解決するのを待っているときに余分なステップが必要ですか?

これは少し具体的ですが、私は答えを理解するとき、私は試してみて、質問を言い換えていただければ幸いです。

コンポーネントコード:

averageScore: Ember.computed(function(){ 
    var students = this.get('group.students'); 
    var objective = this.get('objective'); 
    var store = this.get('store'); 
    var _this = this; 

    // Create an array of promises of each student's scores 
    var promises = []; 
    students.forEach((student) => { 
     var studentId = student.get('id'); 
     var objectiveId = objective.get('id'); 
     var newPromise = store.queryRecord('snapscore', { 'student' : studentId, 'objective': objectiveId }); 
     promises.pushObject(newPromise); 
    }); 
    // When promises resolve, find and return the average 
    return Ember.RSVP.allSettled(promises).then(function(scores){ 
     let scoreTotal = 0; 
     let scoreCount = scores.length; 
     console.log("Score count is " + scoreCount); 
     scores.forEach((score)=>{ 
      console.log("Student's score is " + score.value.get('score')); 
      scoreTotal = scoreTotal + score.value.get('score'); 
     }); 
     console.log("ScoreTotal is " + scoreTotal); 
     var average = scoreTotal/scoreCount; 
     console.log(average); 
     console.log(typeof(average)); 
     return average; 
    }); 
}), 

コンポーネントのテンプレートは、単にaverageScoreを返します。

ありがとうございました

答えて

1

計算されたプロパティは約束していません。したがって、Promiseを計算されたプロパティ内に戻さないでください。一般に、計算されたプロパティ内では何も設定されません。

場合によっては、averageScoreという名前のプロパティを持つことができ、コンポーネントのライフサイクルフックメソッドのいずれかでコードを記述できます(initまたはdidReceiveAttrsフックかもしれません)。結果はaverageScoreプロパティthis.set('averageScore',result)に設定できます。

あなたはまだ気づい約束する計算されたプロパティを作成したい場合は、ember igniter link

+1

が宣誓私はそれを行ってきたのだでした、これは前に...ではないと思う従ってください!完璧な答え、お時間をありがとう。 didReceiveAttrsを使用してプロパティを設定します。 – rjoxford

関連する問題