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