我在Durandal-project工作并使用Breeze对象。
我有一个包含一些复杂类型的breeze模型。
在服务器端,我将一些复杂类型属性设置为null。
但是,当对象到达客户端时,我设置为null的复杂类型包含对复杂类型对象的referance。 我需要它们为空。
我的主要模特模式:
function addEmployeeType(store) {
store.addEntityType({
shortName: "EmployeeDTO",
namespace: "myServer.Entities",
autoGeneratedKeyType: AutoGeneratedKeyType.Identity,
dataProperties: {
Emp_no1: { dataType: DataType.Int32, isNullable: false, isPartOfKey: true },
employeeBaseData: {
name: "employeeBaseData",
complexTypeName: "EmployeeBaseDTO:#myServer.Entities",
isNullable: false,
isPartOfKey: false
},
employeeTblData: {
name: "employeeTblData",
complexTypeName: "EmployeeTblDTO:#myServer.Entities",
isNullable: false
},
employeePersonalDetails: {
name: "employeePersonalDetails",
complexTypeName: "EmployeePersonalDetailsDTO:#myServer.Entities",
isNullable: true
},
employeeContacts: {
name: "EmployeeJobsDTO",
complexTypeName: "EmployeeJobsDTO:#myServer.Entities",
isNullable: true
}
}
});
store.registerEntityTypeCtor("EmployeeDTO", null, employeeInit);
}
服务器端代码(c#,使用apiController):
if (!EnablJobsData)
employeeData.employeeJobsData = null;
我希望在条件为真时,所以在客户端employeeData.employeeJobsData() - 返回 null 。 现状,它返回微风复杂实体。
谢谢!
答案 0 :(得分:1)
现在所有标量 breeze复杂对象属性都被视为不可为空的值类型。做出这个决定,以便对复杂对象上的子属性的查询不必涉及特殊的空检查逻辑。即,以便我们可以使用这样的表达式:
myCustomer.address.city == 'Los Angeles";
而不是
myCustomer.address != null && myCustomer.address.city == 'Los Angeles';
显然,对于更深层嵌套的复杂对象属性,这种表达式会变得更加丑陋。
内部处理的方式是每个复杂对象都有一个'null'版本,它只是复杂的对象,其 all 的属性设置为默认值或空值。此null版本是任何未分配的复杂对象属性的默认值。
因此,如果要检测“null”复杂对象,只需添加一个检查此条件的方法即可。
请注意,对于返回复杂对象数组的属性,这不是问题。在这种情况下,空数组是有效的构造。