我是 Ember 的初学者。该应用程序是一个睡眠跟踪器。我现在正在尝试构建的是过去 N 天内平均睡眠和小睡的小时数。
为了计算平均值,我相信我想在控制器上添加一个计算属性。我还没有模型,因为这个应用程序太原始了。
这是我当前的代码:
// app/routes/home.js
import Ember from 'ember';
let events = [
{
"dow": 5,
"durationInSeconds": 29280,
"endAt": 1471087260000,
"startAt": 1471057980000,
"timezone": "America/Montreal"
},
{ ... }
]
export default Ember.Route.extend({
model() {
return events.sortBy("startAt").reverse();
}
});
// app/controllers/home.js
import Ember from 'ember';
export default Ember.Controller.extend({
averageNapDuration() {
console.log("model: %o", this.get('model'));
return 0;
},
averageNightDuration() {
// TODO
}
});
// app/templates/home.hbs
<table>
..
<tfoot>
<tr>
<td scope="row" colspan="3">Average nap</td>
<td class="duration">{{format-duration averageNapDuration}}</td>
</tr>
<tr>
<td scope="row" colspan="3">Average night</td>
<td class="duration">{{format-duration 22680}}</td>
</tr>
</tfoot>
</table>
我的format-duration
辅助函数执行一个console.log
接收到的值。当显示平均值时,format-duration
接收一个函数而不是一个值。
我也没有在控制器中看到console.log
调用。
在 Handlebars 模板中,我尝试使用:
{{format-duration averageNapDuration() }}
但这会返回语法错误:
Error: Parse error on line 48:
...">{{format-duration averageNapDuration()
-----------------------^
Expecting 'CLOSE_RAW_BLOCK', 'CLOSE', 'CLOSE_UNESCAPED', 'OPEN_SEXPR', 'CLOSE_SEXPR', 'ID', 'OPEN_BLOCK_PARAMS', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', 'SEP', got 'INVALID'
作为另一项测试,我将控制器更改为使用计算属性:
averageNapDuration: Ember.computed.sum('@each.durationInSeconds')
这一次,format-duration
它说它收到 0,这向我表明,模板至少与控制器正确对话。
在哪里可以找到过滤数组的计算属性示例?我必须在上面的代码中更改什么来计算整数的总和?