在SPA中使用breeze.js在每个视图的基础上扩展实体

在SPA中使用breeze.js在每个视图的基础上扩展实体,breeze,single-page-application,Breeze,Single Page Application,试图找出如何在单页应用程序中从breeze.js查询每个视图。现在,当涉及到扩展(又称物化)它们时,breeze扮演着守门员的角色,我想知道还有什么其他选项可以让我这样做。我最初使用knockout的mapping插件,但由于某些原因,它拒绝处理子集合,因此我转而使用breeze的构造函数和初始化方法。问题在于,您只能为一个实体定义一个自定义“模型”。我正在寻找允许在每个视图的基础上自定义实体“模型”的方法。我已经排除了多名经理的可能。多次查询元数据只是为了让它正常工作,这是一个巨大的、不必要的

试图找出如何在单页应用程序中从breeze.js查询每个视图。现在,当涉及到扩展(又称物化)它们时,breeze扮演着守门员的角色,我想知道还有什么其他选项可以让我这样做。我最初使用knockout的mapping插件,但由于某些原因,它拒绝处理子集合,因此我转而使用breeze的构造函数和初始化方法。问题在于,您只能为一个实体定义一个自定义“模型”。我正在寻找允许在每个视图的基础上自定义实体“模型”的方法。我已经排除了多名经理的可能。多次查询元数据只是为了让它正常工作,这是一个巨大的、不必要的打击

这个图表显示了我试图实现的目标。
视图1
视图2
最终查询
实体B
,并且这两个视图都需要对
实体B
的“模型”进行自己的特定定制。由于
视图1
首先加载的是
实体B的自定义“模型”,因此
视图2
没有机会对其进行自定义。当
View 2
最终运行其查询时,任何类型
B
的实体(已由
View 1
加载)都将定义自定义的“模型”,该模型将使
View 2
在绑定期间爆炸。
View 1
尚未加载的任何实体现在都将拥有
View 2
的自定义“模型”,如果视图1能够继续加载,该模型最终将崩溃。看这个


我的想法是为每个视图手动创建我自己的自定义“模型”,每个视图都有一个可观察的实体,然后我可以迭代从breeze查询返回的每个实体,创建这个自定义“模型”,并传入当前项,将其分配给Entity属性。我真的不想这么做,因为我现在到处都有大量的迭代代码,我更愿意使用knockout的映射插件。伪代码:

function view1EntityBModel(entity) {
   var self = this;
   self.Entity = ko.observable(entity);
   self.myCustomProperty = ko.observable();
   ...
}

function view2EntityBModel(entity) {
    var self = this;
    self.Entity = ko.observable(entity);
    self.isExpanded = ko.observable(false);
    ...
}

我想知道是否还有其他解决方案可以实现同样的目标

或者更好的是,是否有人知道如何使knockout映射插件在子集合上工作

我认为这里的问题是,当映射插件获得breeze数据时,
Children
集合已经被转换成一个可观察的数组,映射插件不知道它需要“调用”
Children()
属性以获取列表

var categoryMapper = {
    create: function (options) {
        return new categoryModel(options.data);
    },
    Children: { // this doesn't fire for the children
        create: function (options) {
            return new categoryModel(options.data);
        }
    }
}

function categoryModel(data) {
    var self = this;
    ko.mapping.fromJS(data, {}, self);
}

我猜你现在已经离开了,但我想我会为其他类似职位的人提供一个建议

我们针对类似情况的解决方案借鉴了breeze.js示例解决方案,该解决方案实现了客户端存储库/uow模式。该解决方案使用EntityManager提供程序来管理多个EntityManager。EntityMananagerProvider对元数据进行一次调用,然后使用元数据创建新的子EntityManager—满足您对多个元数据调用的关注。然后,可以使用自定义模型/uow/存储库来扩展特定视图的子管理器