覆盖 breeze.DataType.parseDateFromServer
override breeze.DataType.parseDateFromServer
我正在尝试覆盖这里描述的 breeze 方法 breezejs: date is not set to the right time 但它似乎根本不会影响它。你有什么想法吗?
breeze.DataType.parseDateFromServer 方法(或其重写实现)将在任何时候调用 breeze 确定传入数据表示日期。 breeze 确定这一点的方式是使用其元数据。
此元数据可用于每个 EntityType,但通常 不 可用于每个字段投影。换句话说,如果你执行这个查询
var query = EntityQuery.from("Employees")
.where('birthDate', '>', new Date(1998, 3, 1));
Breeze 将关闭 collection 个 'Employee' 实体,其中 'birthDate' 属性 将通过 parseDateFromServer方法。这是因为 breeze 有关于 'Employee' EntityType 的元数据并且知道 'birthDate' 属性 代表一个日期。
某些逻辑适用于任何涉及 'expand' 或 return 实体的任何属性的 'select' 的查询。即 parseDateFromServer 也在这里调用:
var query = EntityQuery.from("Orders").expand("Employee");
以及此处:
// assuming orderedByEmployee is a property on Order that returns an Employee entity.
var query = EntityQuery.from("Orders").select("orderId, orderedByEmployee");
但是,如果您投影 'loose' 属性,那么 breeze 不知道它们的类型。所以下面的查询:
var query = EntityQuery.from("Employees")
.select('employeeId, birthDate");
不会通过 parseDateFromServer 传递 'birthDate' 属性,而是 return collection of [=75] =] json objects 每个都有一个数字 'employeeId' 属性 和一个 字符串 'birthDate' 属性。
这个原因是 javascript 的固有原因,因为 json 序列化日期看起来完全像一个字符串,并且无法从数据本身判断某个东西是否看起来像一个字符串字符串(带引号的格式)实际上是一个字符串,或者它是否真的代表一个基础日期:
理论上,breeze 可以尝试通过更仔细地查看数据来推断数据类型,但我们很早就决定不应该尝试 'guess' 这样的事情。我们也可以尝试通过解析和评估投影表达式来确定数据类型,但这增加了一定程度的复杂性,我们认为没有必要。
虽然有一个解决方法。您可以告诉 breeze 正在 return 编辑的数据的结构。您可以通过创建 'projection' entityType 然后告诉 breeze 这是您通过使用 EntityQuery toType 方法投影到的内容来执行此操作。像这样:
var query = EntityQuery.from("Employees")
.select('employeeId, birthDate")
.toType("EmployeeProjection");
其中 "EmployeeProjection" 类型定义如下:
var et = new breeze.EntityType({
shortName: "EmployeeProjection",
namespace: "MyNamespace"
});
et.addProperty(new breeze.DataProperty({
name: "employeeId",
dataType: breeze.DataType.Int32,
}));
et.addProperty(new breeze.DataProperty({
name: "birthDate",
dataType: breeze.DataType.DateTime
}));
myEntityManager.metadataStore.addEntityType(et);
在这种情况下,预计结果中的 'birthDate' 属性 将通过 parseDateFromServer。
或者,您可以自己手动调用 'parseDateFromServer' 那些您 'know' 是日期的属性。
希望这是有道理的。
我正在尝试覆盖这里描述的 breeze 方法 breezejs: date is not set to the right time 但它似乎根本不会影响它。你有什么想法吗?
breeze.DataType.parseDateFromServer 方法(或其重写实现)将在任何时候调用 breeze 确定传入数据表示日期。 breeze 确定这一点的方式是使用其元数据。
此元数据可用于每个 EntityType,但通常 不 可用于每个字段投影。换句话说,如果你执行这个查询
var query = EntityQuery.from("Employees")
.where('birthDate', '>', new Date(1998, 3, 1));
Breeze 将关闭 collection 个 'Employee' 实体,其中 'birthDate' 属性 将通过 parseDateFromServer方法。这是因为 breeze 有关于 'Employee' EntityType 的元数据并且知道 'birthDate' 属性 代表一个日期。
某些逻辑适用于任何涉及 'expand' 或 return 实体的任何属性的 'select' 的查询。即 parseDateFromServer 也在这里调用:
var query = EntityQuery.from("Orders").expand("Employee");
以及此处:
// assuming orderedByEmployee is a property on Order that returns an Employee entity.
var query = EntityQuery.from("Orders").select("orderId, orderedByEmployee");
但是,如果您投影 'loose' 属性,那么 breeze 不知道它们的类型。所以下面的查询:
var query = EntityQuery.from("Employees")
.select('employeeId, birthDate");
不会通过 parseDateFromServer 传递 'birthDate' 属性,而是 return collection of [=75] =] json objects 每个都有一个数字 'employeeId' 属性 和一个 字符串 'birthDate' 属性。
这个原因是 javascript 的固有原因,因为 json 序列化日期看起来完全像一个字符串,并且无法从数据本身判断某个东西是否看起来像一个字符串字符串(带引号的格式)实际上是一个字符串,或者它是否真的代表一个基础日期:
理论上,breeze 可以尝试通过更仔细地查看数据来推断数据类型,但我们很早就决定不应该尝试 'guess' 这样的事情。我们也可以尝试通过解析和评估投影表达式来确定数据类型,但这增加了一定程度的复杂性,我们认为没有必要。
虽然有一个解决方法。您可以告诉 breeze 正在 return 编辑的数据的结构。您可以通过创建 'projection' entityType 然后告诉 breeze 这是您通过使用 EntityQuery toType 方法投影到的内容来执行此操作。像这样:
var query = EntityQuery.from("Employees")
.select('employeeId, birthDate")
.toType("EmployeeProjection");
其中 "EmployeeProjection" 类型定义如下:
var et = new breeze.EntityType({
shortName: "EmployeeProjection",
namespace: "MyNamespace"
});
et.addProperty(new breeze.DataProperty({
name: "employeeId",
dataType: breeze.DataType.Int32,
}));
et.addProperty(new breeze.DataProperty({
name: "birthDate",
dataType: breeze.DataType.DateTime
}));
myEntityManager.metadataStore.addEntityType(et);
在这种情况下,预计结果中的 'birthDate' 属性 将通过 parseDateFromServer。
或者,您可以自己手动调用 'parseDateFromServer' 那些您 'know' 是日期的属性。
希望这是有道理的。