javascript - 何时将扩展附加复杂类型添加到 Breeze 实体上

标签 javascript knockout.js breeze single-page-application durandal

我想从数据库加载一个实体,然后使用它的 ICollection(来自模型类)加载一些子数据。如果它是一对多的关系,那么从单个 View 模型中做到这一点就足够简单了,但我有一个更复杂的结构 -

parent 有很多 child 。每个 child 都有许多孙子,需要将其链接回正确的 child 。层次结构需要保持完整。

到目前为止我提出的其他选项可能不是最好的方法,所以我的问题是 - 加载孙子的最佳实践是什么 - 或者其他方法?

在配置元数据存储时在构造函数中 -

function configureMetadataStore(metadataStore) {
    metadataStore.registerEntityTypeCtor(
        'Child', null, childInitializer);
}

function childInitializer(child) {
    child.grandchildren = (Do something here)
        return grandchildren;
    });
}

在填充子项的 View 模型中 -

function refresh() {
    return datacontext.getChildren(childs, parentId);
}

var addGrandChildren = function () {
    $.each(childs, function (i) {
        var grandChildren = ko.observableArray();
        var childId = $(this).data(id);
        datacontext.getGrandChildren(grandChildren, childId);
    });
    return;
};

或者其他方法?

最佳答案

只要您的关系不是单向的,Breeze 实体就会在您查询时自动将它们自己连接在一起。 (编辑:从 v 1.3.5 开始 - Breeze 也将连接单向关系。)

这意味着,如果您使用查询来提取恰好相关的 n 个实体,那么所有这些实体都将以正确的方式自动相互链接。如果您使用 EntityQuery.expand 方法,也会发生同样的情况。因此,您的问题只是如何以最少的调用次数查询您想要的图表的任何部分。

注意:如果您确实想实际“行走”图形,您还应该查看 EntityAspect.loadNavigationProperty 方法。但如果您处理的是大型图表,这可能会导致性能不佳。

关于javascript - 何时将扩展附加复杂类型添加到 Breeze 实体上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196861/

相关文章:

javascript - Google 跟踪代码管理器 - 容器中没有标签

javascript - Breeze : populate the error property of SaveResult

javascript - 在 Breeze 实体中分配新值

javascript - Jquery 中未解析 URL 名称

javascript - Asp.Net 控制值在 Jquery 中返回未定义

javascript - knockout 嵌套 dom 元素上的多重绑定(bind)

javascript - 单页应用程序只是一个页面用于整个 Web 应用程序吗?

knockout.js - knockout : Adding to observable Arrays in Nested ViewModels

breeze - "Unable to satisfy package dependency constraints"与 Breeze.Server.WebAPI2

javascript - 为什么 typeof null 的值会在循环内发生变化?