3

我在 SPA 中使用轻风.js并且从服务器加载的实体有问题。即,从元数据(使用metadataEntityType.createEntity())创建并添加到实体管理器的实体具有服务器端模型等所有属性,可以使用敲除进行绑定,这很酷。

问题是当我使用时entityModel.EntityQuery.from("WorkOrders"),我传递给它的.thenpromise 的 successCallback 获得了一个带有 results 属性的数据对象,其中包含一个 vanilla js 对象数组,其中所有 value == null 的属性都丢失了(这正是服务器发送的方式数据通过网络传输,但我认为它应该是这样的,因为微风在客户端上有所有元数据,不需要所有属性都知道它们存在)。

我有我的自定义构造函数,它可以像 createEntity() 中的那样制作完整的淘汰对象,但我认为必须有一种更好的方法让微风自动为我处理这个问题。我不确定是否应该将这些对象添加到实体管理器,因为我认为它们应该已经存在,并且我注册了我的自定义构造函数来存储 using entityManager.metadataStore.registerEntityTypeCtor,但这并没有改变成功回调得到的内容,它始终是纯 JSON,就像它是从服务器发送的。

更新:在服务器上调用以返回 json 有效负载的方法代码是

[HttpGet]
public IQueryable<WorkOrder> WorkOrders()
{
    return (IQueryable<WorkOrder>)_contextProvider.Context.WorkOrders;
}

正如@Jay 在其回答和评论中指出的那样,这可能是行为的原因。这是返回的 JSON 有效负载:

[{"$id":"1","$type":"WorkOrders.Domain.Models.WorkOrder, WorkOrders.Domain","Approved":false,"DateModified":"2013-01-02T22:31:20.897","RequestForEstimate":false,"Id":5}]
4

2 回答 2

3

此问题是由模型位于与托管它的 DbContext/ObjectContext 不同的命名空间引起的。以前,这被记录为已知限制。

从 v 0.83.2 开始,Breeze 现在允许模型命名空间不同于 DbContext/ObjectContext 命名空间。

请确认这是否能解决问题。

谢谢

于 2013-01-06T07:53:33.797 回答
1

我不太确定我明白你在问什么。您是否希望服务器上具有空值的属性以空值而不是未定义的方式返回到微风客户端,还是我错过了这个问题?

如果这是问题所在,我同意您想要的内容会很有用,我会将其添加为功能请求。

您可能想要查看的另一种可能性是使用“registerEntityTypeCtor”方法的第三个参数,该方法允许您传入初始化函数。对于正在构造的每个实体,该函数将被调用一次,“之后”它已经被物化了。这意味着您可以遍历属性或对象,并将任何具有“未定义”值的对象设置为“空”

这有意义吗?

于 2013-01-04T00:07:11.223 回答