我正在循环一个 ArrayController 的内容,其内容设置为 RecordArray。每条记录都是 DS.Model,比如 Client
{{# each item in controller}}
{{item.balance}}
{{/each}}
balance 是 Client 模型的属性,调用 item.balance 将直接从模型中获取属性。我想应用一些格式来平衡以货币格式显示。实现此目的的简单方法是将计算属性 balanceMoney 添加到 Client 对象并在那里进行格式化:
App.Client = DS.Model({
balance: DS.attr('balance'),
balanceMoney: function() {
// format the balance property
return Money.format(this.get('balance');
}.property('balance')
});
这很好地达到了目的,但 balanceMoney 计算属性的正确位置是客户端控制器而不是客户端模型。我的印象是,Ember 首先在控制器中查找属性,然后如果没有找到,则尝试在模型中检索它们。但是,这一切都不会发生,对 item.balanceMoney 的调用将被忽略并且永远不会到达控制器。
是否可以以某种方式配置控制器以在所有情况下始终充当模型的代理。
更新 - 使用 emberjs 主存储库中的最新版本,您可以配置数组控制器以通过控制器代理解析记录的方法,方法是覆盖 ArrayController 中的 lookupItemController 方法。该方法应返回不带“控制器”后缀的控制器名称,即客户端而不是客户端控制器。仅itemControllerClass
在数组控制器中设置属性目前似乎不起作用。
lookupItemController: function( object ) {
return 'client';
},