2015-12-17 7 views
5

私は最近私のコードに導入された廃止予定を削除しようとしており、何か助けが必要です。Ember ember-views.render-double-modify deprecation

廃止は次のとおりです。

あなたが二回レンダリングシングルで...修正します。これは、エンバー1.xの中で信頼性の低いだったとエンバー2.0で削除されます[非推奨ID:残り火-views.render-ダブル修正]

私が何をしようとしているが、その後のスコアのリストを表示していますスコアの合計私は最低のスコアを落とし、それを計算された合計に含めないでください。私はこれが働いている。非難されたスコアにclassNameBindingsを介してCSSクラスを追加しようとすると、非推奨となります。

私は、calculateTotalの計算されたプロパティの中でEmber.setを実行しているときに、これが起こっていると確信しています。

私の質問は、私がフォームでスコアを変更したときに更新されたCSSで合計得点を更新し続けることができますか?

コードの詳細: 私は2つのコンポーネントを持っています。 score-rowおよびjudge-row。スコア行はスコアオブジェクトの配列をとり、各スコアをループしてジャッジスコアコンポーネントを呼び出します。 - (嘲笑コードはこの質問のために引き出さ)

let scores = new Ember A(); 
scores.pushObject(Ember.Object.create({ points: 1 })); 
scores.pushObject(Ember.Object.create({ points: 2 })); 
scores.pushObject(Ember.Object.create({ points: 3 })); 

https://ember-twiddle.com/6696d907b604aa750201?numColumns=1

index.js:ここ

Ember  : 2.2.0 
Ember Data : 2.2.1 

更新は、問題を実証する作業エンバーひねりですindex.hbs

{{score-row scores=scores}} 

スコア-row.hbs

{{#each scores as |score|}} 
    {{judge-score score=score}} 
{{/each}} 

{{calculatedTotal}} 

スコア-row.js:

calculatedTotal: Ember.computed('[email protected]',() => { 
    let totalScore = 0, 
     scores = this.get('scores'); 

    if(Ember.isPresent(scores)) { 
     var i, 
      scoresLength = scores.length, 
      sortedAscending, 
      numLowToDrop = 1; 

     sortedAscending = this.get('sortedScores'); 

     for(i = 0; i < scoresLength; i++) { 
      currentScoreObj = sortedAscending.objectAt(i); 

      // I think this is what is causing the ember-views.render-double-modify 
      Ember.set(currentScoreObj, '_droppedLow', (i < numLowToDrop)); 
     } 

     sortedAscending.forEach((score) => { 
      if(!score.get('_droppedLow')) { 
       totalScore += +score.get('points'); 
      } 
     }); 
    } 
    return totalScore; 
}), 

// had to write my own sort because scores.sortBy('points') was sorting as if 
// points were a string and not a number ? 
sortedScores: Ember.computed.sort('[email protected]', (score1, score2) => { 
    if (+score1.get('points') > +score2.get('points')) { 
     return 1; 
    } else if (+score1.get('points') < +score2.get('points')) { 
     return -1; 
    } 
    return 0; 
}) 

裁判官-score.hbs

{{input value=score.points}} 

裁判官-score.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    classNameBindings: [ 
     "score._droppedLow:droppedLow" 
    ] 
}); 

ありがとうございました!

+0

あなたは、これがソートを取得しました:

はこれを試してみてください?私はまったく同じ種類の状況でそれを見ています。 –

+1

はいChris、embertwiddleページを見ると、もはや非推奨警告がありません。基本的に、私はスコアを表示するために別の計算されたプロパティを使用しました。 – DanMonroe

答えて

0

多分pushObjectと呼ばれるたびに計算されたプロパティが再トリガされるのだろうか?

let scores = new Ember A([ 
    Ember.Object.create({ points: 1 }), 
    Ember.Object.create({ points: 1 }) 
]); 
+0

ペドロに感謝します。あなたの提案にEmber Twiddleを追加しましたが、引き続き非推奨警告があります。 – DanMonroe