【发布时间】:2018-01-31 01:34:02
【问题描述】:
我有一个应用程序可以显示视频并允许用户对视频进行评分。平均评分和视频被评分的次数显示在其下方。为了计算这些,我为每个模型添加了计算属性。平均属性依赖于 sum 和 length 计算属性。
/*global Ember */
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
url: DS.attr('string'),
ratings: DS.hasMany('userrating'),
users: DS.hasMany('user'),
rated: DS.attr('boolean'),
// maps through ratings objects and pulls out the rating property
// returns an array of integers that represent all of one videos ratings
numRatings: Ember.computed.mapBy('ratings', 'rating'),
// returns the sum of a videos ratings
sum: Ember.computed.sum('numRatings'),
// returns the number of ratings a video has
length: Ember.computed('numRatings', function () {
return this.get('numRatings').length;
}),
// returns true if the video has only been rated once
// this is used to determine if '1 user' or '2 users' etc.
// should be displayed
one: Ember.computed('length', function () {
if (this.get('length') === 1) {
return true;
}
}),
// returns the average rating of a video
avg: Ember.computed('length', 'sum', function () {
return Math.round(this.get('sum') / this.get('length'));
})
});
我注意到有时总和会代替平均值显示。这通常只发生一秒钟,然后平均值正确显示,但每隔一段时间平均值不会显示。今天,除了一个视频之外的所有视频都可以正确显示,但该视频的平均评分显示为“33/5”。
为什么会这样? 我不应该构建 Ember 计算属性以相互依赖吗? 这只是浏览器速度慢的问题吗?我正在加载一堆视频和图像。
总的来说,我对 Web 开发很陌生,这是我的第一个 Ember 应用。
谢谢!
【问题讨论】:
-
一些改进:
length: computed.readOnly('numRatings.length'),one: computed.equal('length', 1)
标签: javascript ember.js