自定义初始值设定项中导入实体中缺少子导航属性

时间:2015-02-12 18:03:40

标签: breeze

我有一个自定义实体定义,如:

    var Card = function () {};

    var cardInitializer = function (card) {

        // card.fields is defined in the metadata.
        // card._cfields is an in-memory only field
        // that breeze will not, and should not, track.
        // Thus it is being added in the initializer

        card._cfields = card.fields.slice();
    };

从服务器加载数据时一切都很好。 card.fields数组具有相应的数据。

已编辑:添加了有关如何设置管理员的更多信息和代码

但是当数据通过.exportEntitiesimportEntities在本地存储中往返时,元数据中定义的子数据由属性{{1}表示在此示例中,在初始化程序调用期间未加载(数组具有card.fields),但在加载完成后随后在实体上可用。

以下是管理员的初始化方式:

length 0

2 个答案:

答案 0 :(得分:0)

哇。你要求免费的OSS产品的开发者提供免费支持,你可能会认为这是有价值的,然后你因为你认为他是轻率的而嘲笑他?并降级他的答案。

你可以慷慨地回应吗?也许你可能会认识到你的问题有点不清楚。我想这是你想到的,因为你编辑了你的问题,这样我就可以看到你在开什么了。

下次有两个建议。 (1)太好了。 (2)提供一个运行代码示例,说明您的问题。

我会半途而废。我认为I wrote a plunker证明了您的抱怨。

它表明,即使相关实体位于缓存中,importEntities调用初始值设定项时也可能无法连接导航属性。

在调用初始值设定项时,它们似乎在查询结果处理期间连线。

我无法解释为什么他们在这方面有所不同。我会问。

我个人的偏好是保持一致并将实体连接起来。但可能有很好的理由说明为什么我们不这样做或为什么即使在处理查询结果时它也是不确定的。我会尽力得到答案。

与此同时,你将不得不解决这个问题......你可以通过处理从导入返回的值来做到这一点:

var imported = em2.importEntities(exported);

FWIW,文档没有提及这个问题。

答案 1 :(得分:-1)

查看"扩展实体"文档主题。

您将看到,根据设计,breeze不知道在初始化程序中创建的任何属性,因此在序列化期间忽略此类属性,例如实体导出。这是一项功能而非限制。

如果你想要清风,那就知道"关于未映射的属性,您必须在实体构造函数(Card)中定义它...即使您稍后在初始化函数中填充它。

同样,最好先查看文档和示例,然后再自行开始。