我很好奇是否有人知道为什么在微风查询中添加.Select并且仅返回单个列会导致我的日期字段以不同的方式进行解析?我的想法是两个查询都应返回相同的数据/使用相同的元数据作为我的日期字段。
例如
Retrieving the entity that includes the date:
function getACase()
{
var returnPromise = Q.defer();
var caseQuery = breeze.EntityQuery
.from("case")
.where("pkCaseID", "eq", 1013)
return Q.delay(0)
.then(function()
{
return manager.executeQuery(caseQuery)
.then (function(data)
{
returnPromise.resolve();
return data.results;
})
.fail(function(){$log.error("CaseData Query Failed")});
}) ;
return returnPromise.promise();
}
CourtDate列转换为日期:(数据库的实际日期是1/1/1950)
Retrieving just the date column from the database:
function retrieveCourtDate ()
{
var returnPromise = Q.defer();
var query = breeze.EntityQuery
.from("case")
.where ("pkCaseID", "eq", 1013)
.select("CourtDate");
return Q.delay(0)
.then(function()
{
return manager.executeQuery(query)
.then (function(data)
{
returnPromise.resolve();
return data.results;
})
.fail(function(){$log.error("Date Query Failed")});
});
return returnPromise.promise();
}
CourtDate未转换:
在屏幕上显示为:
答案 0 :(得分:2)
好的,这是不一个错误,但这很痛苦。基本上,当Breeze执行返回任何已知 entityType 的查询时,我们有元数据确定 dataType 对于从服务器返回的json中的每个属性是什么。这是允许我们采用像这样的“1996-07-13T00:00:00.000Z”的json ISO8601序列化日期字符串并将其转换为javascript日期对象: Fri Jul 12 17:00:00 PDT 1996 < /强>
问题在于,当您使用Breeze“select”语句时,从服务器返回的结果是匿名对象,而Breeze不知道此对象上任何属性的数据类型。 Breeze 执行遍历返回对象的所有属性以确定是否存在任何嵌入实体,但它无法确定名为“CourtDate”的属性实际上是日期数据类型(我们可以猜,但还有其他问题)。
对于包含日期的匿名对象,有一个解决方法,因为您知道属性为Dates,您可以调用Breeze的 DataType.parseDateFromServer 方法
data.results.forEach(function(anon) {
anon.CourtDate = breeze.DataType.parseDateFromServer(anon.CourtDate);
}