2015-12-17 20 views
5

Próbuję wyeliminować wycofanie, które niedawno wprowadziłem do mojego kodu i potrzebuję pomocy.Ember ember-views.render-double-modyfikacja przestarzałości

deprecation jest:

Zmodyfikowano ... dwa razy w jeden render. To było niewiarygodne w Ember 1.x i zostaną usunięte w Ember 2,0 [deprecation id: Ember-views.render-double-zmodyfikować]

Co staram się zrobić, to wyświetla listę punktów, a następnie suma wyników. Muszę obniżyć najniższy wynik i nie uwzględniać go w obliczonej sumie. Mam to działa. Ta deprecjacja pojawia się, gdy próbuję dodać klasę CSS przez klasęNameBindings do wyniku, który został wykluczony.

Jestem prawie pewien, że to się dzieje, gdy robię Ember.set podczas mojej wyliczonej właściwości calculateTotal.

Moje pytanie brzmi: w jaki inny sposób mogę zachować ogólny wynik zaktualizowany za pomocą CSS również zaktualizowany po zmianie wyniku w formularzu?

szczegóły kodu: Mam dwa komponenty; rząd wynikowy i wiersz sędziowski. Rząd-wynik bierze tablicę obiektów punktowych, pętle przez każdy wynik wywołujący komponent oceny sędziego.

Ember  : 2.2.0 
Ember Data : 2.2.1 

Aktualizacja Tu jest praca Ember Twiddle wykazując problemu:

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

index.js - (kod szydzili wyciągnął na to pytanie)

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 })); 

index.hbs

{{score-row scores=scores}} 

nacięcia row.hbs

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

{{calculatedTotal}} 

nacięcia 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; 
}) 

sędzia-score.hbs

{{input value=score.points}} 

sędzia-score.js

import Ember from 'ember'; 

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

Dzięki!

+0

Czy kiedykolwiek się to sortowane? Widzę to w dokładnie takiej samej sytuacji. –

+1

Tak Chris, jeśli spojrzysz na stronę embertwiddle, nie ma już ostrzeżenia o wycofaniu.Zasadniczo użyłem innej wyliczonej właściwości do wyświetlenia wyników. – DanMonroe

Odpowiedz

0

Zastanawiam się, czy może za każdym razem, gdy jest wywoływana pushObject, ponownie uruchamia ona obliczoną właściwość?

Spróbuj tego:

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

Dzięki Pedro. Dodałem Ember Twiddle z twoją sugestią, ale wciąż ma ostrzeżenie o wycofaniu. – DanMonroe