我在SPA中使用breeze.js,并且从服务器加载的实体有问题。也就是说,从元数据(使用metadataEntityType.createEntity()
)创建并添加到实体管理器的实体具有所有属性,如服务器端模型,准备与敲除绑定,这很酷。
问题是当我使用entityModel.EntityQuery.from("WorkOrders")
时,我传递给它的.then
promise的successCallback获取一个带有results属性的数据对象,该属性包含一个vanilla js对象数组,其中所有属性都带有值缺少== null(这正是服务器通过网络发送数据的方式,但我认为它的意思是因为breeze在客户端上有所有元数据,并且不需要所有属性都知道它们存在)。
我有自定义构造函数,它可以像createEntity()那样制作完整的挖空对象,但我认为必须有更好的方法让breeze自动为我处理这个问题。我不确定是否应该将这些对象添加到实体管理器中,因为我认为它们应该已经存在,并且我使用entityManager.metadataStore.registerEntityTypeCtor
注册了我的自定义构造函数来存储,但这不会改变成功回调获取的内容,它是总是简单的JSON,就像它是从服务器发送的一样。
更新:在服务器上调用以返回json有效负载的方法代码是
[HttpGet]
public IQueryable<WorkOrder> WorkOrders()
{
return (IQueryable<WorkOrder>)_contextProvider.Context.WorkOrders;
}
正如@Jay指出的答案&amp;评论,这可能是行为的原因。这是返回的JSON有效负载:
[{"$id":"1","$type":"WorkOrders.Domain.Models.WorkOrder, WorkOrders.Domain","Approved":false,"DateModified":"2013-01-02T22:31:20.897","RequestForEstimate":false,"Id":5}]
答案 0 :(得分:3)
此问题是由于模型位于与托管它的DbContext / ObjectContext不同的命名空间中引起的。以前,这被记录为已知的限制。
从v 0.83.2开始,breeze现在允许模型名称空间与DbContext / ObjectContext名称空间不同。
请确认这是否解决了这个问题。
由于
答案 1 :(得分:1)
我不太清楚我明白你在问什么。是否您希望服务器上具有空值的属性返回到breeze客户端,其值为null而不是未定义,或者我是否错过了该问题?
如果这是问题,我同意您想要的内容会有用,我会将其添加为功能请求。
您可能希望查看的另一种可能性是将第3个参数用于'registerEntityTypeCtor'方法,该方法允许您传入初始化函数。对于每个正在构造的实体,此函数将被调用一次,“之后”它已经被实现。这意味着您可以迭代属性或对象,并将值为'undefined'的任何值设置为'null'
这有意义吗?