Konckout、Breeze JS、Durandal JS、ASP.NET Web API を使用していますが、私の質問は Breeze と Knockout に固有のものです。
Breeze クエリによって返されたエンティティから Knockout オブザーバブルの拡張を自動化するにはどうすればよいですか?
Breeze を介して返される顧客のリストがあり、表示可能にしたい DB 固有のフィールドがあります。特に私が欲しい:
- UTC タイムスタンプ (例: "2011-07-02 13:20:13.8061582 +00:00") は、ローカルの日付と時刻として表示されます (例: "July 2, 2011 1:20 PM")
- 通貨 (例: "$2500.12") としてフォーマットされる小数の金額 (例: "2500.12")
- ステータスに基づいて特定の css クラスを追加します (例: is Status="Available", add cssStatus="item-available")
私が読んだことから (私が間違っている場合はお知らせください)、これを行う方法は、カスタムバインディングを使用するのではなく、.extend()
関数を使用して KO オブザーバブルを拡張することです。
私のdataservice.jsには、オブザーバブルを受け入れてデータ結果に設定する次のBreezeクエリがあります。
// -- snip --
function getCustomers(koCustomers) {
var query = breeze.EntityQuery
.from('Customers');
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
koCustomers([]);
koCustomers(data.results);
}
}
// -- snip --
参考までに、ここにも私のviewmdelがあります
define(['durandal/app',
'durandal/system',
'durandal/plugins/router',
'services/config',
'services/logger',
'services/datacontext'],
function (app, system, router, config, logger, datacontext) {
'use strict';
var customers = ko.observableArray();
var viewModel = {
title: 'Vehicles',
activate: activate,
customers: customers
};
return viewModel;
function activate() {
return datacontext.getCustomers(customers);
}
});
observable と data.results を受け入れ、各結果をループして展開するある種のマッピング関数が必要だと考えています...例をいただければ幸いです...