我想知道参与扫描的人数。 此刻我需要2个计数:
我在Ember制作了一个数据透视表,其中包含有关参与者的特定数据,就像他完成扫描一样。
我的模特:
import DS from 'ember-data';
var inflector = Ember.Inflector.inflector;
inflector.irregular('scan', 'scan');
var scanModel = DS.Model.extend({
title: DS.attr('string'),
mailInviteSubject: DS.attr('string'),
mailInviteMessage: DS.attr('string'),
mailResponseAddress: DS.attr('string'),
dateDeadline: DS.attr('date'),
scanGroup: DS.belongsTo('scanGroup', {async: true}),
questionGroups: DS.hasMany('question-group', {async: true}),
/**
* Participants
*/
scanParticipants: DS.hasMany('scanParticipants', {async: true}),
participants: Ember.computed('scanParticipants.@each.participants', function () {
return this.get('scanParticipants').then(function(scanParticipants) {
return scanParticipants.mapBy('participant');
})
}),
participantsCount: Ember.computed('scanParticipants', function () {
return this.get('scanParticipants').then(function (participants) {
return participants.get('length');
});
}),
participantsCountFinished: Ember.computed('scanParticipants', function () {
return this.get('scanParticipants').then(function (participants) {
return participants.filterBy('finished', true).get('length');
});
}),
isClosed: Ember.computed('dateDeadline', function () {
let scanDate = moment(this.get('dateDeadline'));
let date = moment();
if(scanDate < date)
return true;
else
return false;
}),
});
export default scanModel;
我有以下模板:
<td>{{input type="checkbox" checked=isChecked action="scanChecked"}}</td>
<td>
<h2>{{scan.title}}</h2>
Verloopt op {{format-date scan.dateDeadline format="DD MMMM"}} <small class="_muted">({{#if scan.isClosed}}Afgerond{{else}}Over{{/if}} {{format-date scan.dateDeadline type='remaining'}} geleden)</small>
</td>
<td>
<h2>{{scan.participantsCount}}</h2>
<small class="_muted">uitgenodigd</small>
</td>
<td>
<h2>{{scan.participantsCountFinished}}</h2>
<small class="_muted">voltooid</small>
</td>
<td class="_align-right">
{{#link-to 'scangroup.scan' scan.id class="btn btn-inverted btn-small"}}Bekijk{{/link-to}}
</td>
现在的问题是,{{scan.participantsCount}}
和{{scan.participantsCountFinished}}
在我的模板中显示[Object Object]
而不是计数。
但是,如果我记录了诺言中的计数,我会得到应该在模板中显示的好计数。
如何显示[对象对象]而不是计数,我怎样才能显示计数?
提前致谢!
请问,
帕斯卡
答案 0 :(得分:0)
您正在观察属性本身而不是数组。这意味着他们只会在scanParticipants
更改值时重新计算,例如this.set('scanParticipants', someValue)
,而不是在更新时。要解决此问题,您可以执行Ember.computed('scanParticipants.[]', function() {
。
您看到的是[Object Object]
,因为这是从计算属性返回的承诺。当你从计算属性返回一个promise时,你需要将它包装在PromiseObject或PromiseArray中,但是Ember Data已经为你做了这个关系。
有几种方法可以解决这个问题:
{{scan.scanParticipants.length}}
participantsCount: Ember.computed.alias('scanParticipants.length')
participantsCount: Ember.computed('scanParticipants.[]', function () { return this.get('scanParticipants.length'); })
请注意,您还拥有Ember.computed.filterBy方法。