Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Breeze查询返回的实体自动扩展敲除观测值?_Javascript_Knockout.js_Asp.net Web Api_Breeze_Durandal - Fatal编程技术网

Javascript 如何从Breeze查询返回的实体自动扩展敲除观测值?

Javascript 如何从Breeze查询返回的实体自动扩展敲除观测值?,javascript,knockout.js,asp.net-web-api,breeze,durandal,Javascript,Knockout.js,Asp.net Web Api,Breeze,Durandal,我正在使用Konckout、Breeze JS、Durandal JS、ASP.NET Web API,但我的问题是针对Breeze和Knockout的 如何从Breeze查询返回的实体自动扩展敲除观测值? 我有一个通过Breeze返回的客户列表,他们有DB特定的字段,我想让这些字段更具代表性。 我特别想要: UTC时间戳(例如“2011-07-02 13:20:13.8061582+00:00”)显示为本地日期和时间(例如“2011年7月2日下午1:20”) 将十进制金额(例如“2500.1

我正在使用Konckout、Breeze JS、Durandal JS、ASP.NET Web API,但我的问题是针对Breeze和Knockout的

如何从Breeze查询返回的实体自动扩展敲除观测值?

我有一个通过Breeze返回的客户列表,他们有DB特定的字段,我想让这些字段更具代表性。 我特别想要:

  • UTC时间戳(例如“2011-07-02 13:20:13.8061582+00:00”)显示为本地日期和时间(例如“2011年7月2日下午1:20”)
  • 将十进制金额(例如“2500.12”)格式化为货币(例如“2500.12美元”)
  • 根据状态添加特定的css类(例如,is status=“Available”,Add cssStatus=“item Available”)
从我所读到的(如果我错了,请告诉我)),实现这一点的方法是不再使用自定义绑定,而是使用
.extend()
函数扩展KO可观测值

My 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);
    }
});
我想我需要某种映射函数,它可以接受可观察的和数据。结果,然后循环遍历每个结果并扩展它。。。
如果只是格式化,那么定制绑定就更简单、更易于维护。如果您需要扩展模型,那么当您从服务器获取模型时,只需应用转换,以便每个实体都有您所需要的。例如:

var entities = getEntitiesFromTheServer();

$.each(entities, function(i, entity){
    entity.formattedCurrency = ko.computed(function (){
        return '$' + entity.amount;
    });
});
通过这种方式可以绑定它:

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

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

var entities = getEntitiesFromTheServer();

$.each(entities, function(i, entity){
    entity.formattedCurrency = ko.computed(function (){
        return '$' + entity.amount;
    });
});
通过这种方式可以绑定它:

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

还可以使用push()扩展observableArray

像这样:

   function getCustomers(koCustomers) {
        var query = breeze.EntityQuery
            .from('Customers');

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            koCustomers([]);
            var temp =ko.observable();
var p =ko.observableArray();
p(data.results).
var len= p().length();
var i;

for(i=0; i<len; i++)
{
temp(p()[i].amount())
var q=ko.computed(function(){
return {amount: '$' + temp()} ;
koCustomer().push(q);
});
}
}
}
函数getCustomers(koCustomers){
var query=breeze.EntityQuery
.来自(“客户”);
return manager.executeQuery(查询)
.然后(查询成功)
。失败(查询失败);
函数查询成功(数据){
客户([]);
var-temp=可观察的ko();
var p=ko.observableArray();
p(数据结果)。
var len=p().length();
var i;
对于(i=0;i也可以使用push()扩展observableArray

像这样:

   function getCustomers(koCustomers) {
        var query = breeze.EntityQuery
            .from('Customers');

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            koCustomers([]);
            var temp =ko.observable();
var p =ko.observableArray();
p(data.results).
var len= p().length();
var i;

for(i=0; i<len; i++)
{
temp(p()[i].amount())
var q=ko.computed(function(){
return {amount: '$' + temp()} ;
koCustomer().push(q);
});
}
}
}
函数getCustomers(koCustomers){
var query=breeze.EntityQuery
.来自(“客户”);
return manager.executeQuery(查询)
.然后(查询成功)
。失败(查询失败);
函数查询成功(数据){
客户([]);
var-temp=可观察的ko();
var p=ko.observableArray();
p(数据结果)。
var len=p().length();
var i;

对于(i=0;我也看一下数字的格式化规则……格式化的几种方法。至于css-@user1168541谢谢-对于css,我需要根据不同的状态应用不同的css样式(状态可以是可用的、待定的、已交付的等)不仅仅是可用的…还可以查看数字的格式规则…关于格式的几种方法。至于css-@user1168541谢谢-对于css,我需要根据不同的状态应用不同的css样式(状态可以是可用的、挂起的、已交付的等),而不仅仅是可用的。。。