我正在使用 Konckout、Breeze JS、Durandal JS、ASP.NET Web API,但我的问题是针对 Breeze 和 Knockout 的。
如何从 Breeze 查询返回的实体自动扩展 Knockout observables?
我有一个通过 Breeze 返回的客户列表,他们有数据库特定的字段,我想让这些字段看起来像样。我特别想要:
- UTC 时间戳(例如“2011-07-02 13:20:13.8061582 +00:00”)显示为本地日期和时间(例如“2011 年 7 月 2 日下午 1:20”)
- 要格式化为货币的小数金额(例如“2500.12”)(例如“$2500.12”)
- 根据状态添加特定的css类(例如是Status="Available",添加cssStatus="item-available")
根据我的阅读(如果我错了,请告诉我),这样做的方法是不再使用自定义绑定,而是使用.extend()
函数扩展 KO observables。
我的 dataservice.js 具有以下 Breeze 查询,该查询接受 observable 并将其设置为数据结果。
// -- 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 的映射函数,然后循环遍历每个结果并展开它......任何例子都将不胜感激......