javascript - 如何自动从 Breeze 查询返回的实体扩展 Knockout 可观察量?

标签 javascript knockout.js asp.net-web-api breeze durandal

我正在使用 Konckout、Breeze JS、Durandal JS、ASP.NET Web API,但我的问题特定于 Breeze 和 Knockout。

如何从 Breeze 查询返回的实体自动扩展 Knockout 可观察量?

我有一个通过 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")

根据我所读到的内容(如果我错了,请告诉我),执行此操作的方法不再使用自定义绑定(bind),而是使用 .extend( ) 函数。

我的 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,然后循环每个结果并扩展它...... 任何例子将不胜感激...

最佳答案

如果只是格式化,那么自定义绑定(bind)会更简单且更易于维护。如果您需要扩展模型,那么当您从服务器获取模型时,只需应用转换,以便每个实体都有您需要的内容。例如:

var entities = getEntitiesFromTheServer();

$.each(entities, function(i, entity){
    entity.formattedCurrency = ko.computed(function (){
        return '$' + entity.amount;
    });
});

这样你就可以绑定(bind)它:

<span data-bind="text: formattedCurrency"></span>

关于javascript - 如何自动从 Breeze 查询返回的实体扩展 Knockout 可观察量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740084/

相关文章:

jquery - 通过 select 更新变量

javascript - 使用 jquery 上传文件可以在 Firefox 中使用,但不能在 Internet Explorer 中使用

c# - HttpRequestMessage(HttpClient) 和 HttpWebRequest 选哪个?

visual-studio-2010 - "Stop Debugging"后VS2010一直运行(Web API)

javascript - 将 chrome.tabs.query 放入函数中始终返回 undefined

javascript - 如何编写一个 Protractor 测试来查找 'ng-repeat' 中的第一个元素?

asp.net-mvc - 忘记了 asp.net 身份的密码

javascript - 自定义绑定(bind)中带有 ko.renderTemplate 的上下文

javascript - Angular 2-根据模式更改文本显示格式

javascript - if-image-height JavaScript 语句