Javascript 如何从Breeze查询返回的实体自动扩展敲除观测值?
我正在使用Konckout、Breeze JS、Durandal JS、ASP.NET Web API,但我的问题是针对Breeze和Knockout的 如何从Breeze查询返回的实体自动扩展敲除观测值? 我有一个通过Breeze返回的客户列表,他们有DB特定的字段,我想让这些字段更具代表性。 我特别想要: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
- 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样式(状态可以是可用的、挂起的、已交付的等),而不仅仅是可用的。。。