コンテンツがRecordArrayに設定されているArrayControllerのコンテンツをループしています。各レコードはDS.Modelであり、クライアントと言います
{{# each item in controller}}
{{item.balance}}
{{/each}}
balanceはクライアントモデルのプロパティであり、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メソッドをオーバーライドすることにより、コントローラープロキシを介してレコードのメソッドを解決するようにアレイコントローラーを構成できます。このメソッドは、「controller」サフィックスのないコントローラーの名前、つまりclientControllerではなくclientを返す必要があります。アレイコントローラでプロパティを設定するだけitemControllerClass
では、今のところ機能していないようです。
lookupItemController: function( object ) {
return 'client';
},