gpt4 book ai didi

ember.js - Ember ember-views.render-double-modify 弃用

转载 作者:行者123 更新时间:2023-12-02 05:14:51 45 4
gpt4 key购买 nike

我正在尝试消除我最近在代码中引入的弃用,我需要一些帮助。

弃用是:

You modified ... twice in a single render. This was unreliable in Ember 1.x and will be removed in Ember 2.0 [deprecation id: ember-views.render-double-modify]



我想要做的是显示分数列表,然后显示分数的总和。我需要删除最低分数,而不是将其包含在计算的总数中。我有这个工作。当我尝试通过 classNameBindings 将 CSS 类添加到已排除的分数时,就会出现弃用。

我很确定这是在我的计算属性中执行 Ember.set 时发生的。

我的问题是,当我更改表单中的分数时,我还可以如何使用 CSS 更新总分数?

代码详情:
我有两个组成部分; 得分行法官行 . Score-row 接受一组 score 对象,循环遍历每个 score 调用 Judge-score 组件。
Ember      : 2.2.0
Ember Data : 2.2.1

更新 这是一个工作 Ember Twiddle 演示了这个问题:

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

index.js - (针对这个问题提取了模拟代码)
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 }));

索引.hbs
{{score-row scores=scores}}

分数行.hbs
{{#each scores as |score|}}
{{judge-score score=score}}
{{/each}}

{{calculatedTotal}}

评分-row.js:
calculatedTotal: Ember.computed('scores.@each.points', () => {
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('scores.@each.points', (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"
]
});

谢谢!

最佳答案

不知道是不是每次pushObject被称为重新触发您的计算属性?

尝试这个:

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

关于ember.js - Ember ember-views.render-double-modify 弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326319/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com