我有 2 个实体经理:
var mgr1 = new breeze.EntityManager('api/app');
var mgr2 = new breeze.EntityManager('api/app');
现在,我正在分别获取每个元数据,尽管元数据完全相同。我显式调用 fetch 方法来控制加载元数据的时间。
mgr1.fetchMetadata();
mgr2.fetchMetadata();
我读到可以在两个管理器之间共享元数据,但我还没有找到示例。根据我所读到的内容,我认为我可以在第二个管理器的构造函数中指定引用第一个管理器的元数据的元数据,但不确定它会是什么样子。所以我的代码看起来像这样:
var mgr1 = new breeze.EntityManager('api/app');
mgr1.fetchMetadata();
var mgr2 = new breeze.EntityManager({ serviceName: 'api/app', metadata: WHAT_GOES_HERE});
我知道我还必须将其与 promise 进行排序,以便在第一个管理器加载其元数据之前不会构建第二个管理器。
我走的路正确吗?我的目标是消除为第二个管理器加载元数据所需的额外带宽。谢谢
最佳答案
您实际上不必获取元数据来共享相同的 MetadataStore。以下两条语句是一个非常简洁的方法:
var em1 = new breeze.EntityManager('api/app');
var em2 = em1.createEmptyCopy();
我并不是想表现得聪明。我的观点是,MetadataStore
是元数据的容器,在 EntityManager
创建后立即可用,并且在保存任何元数据之前就已明确定义无论如何。
createEmptyCopy()
方法“克隆”管理器,而不复制其实体缓存内容。复制的属性包括管理器的 MetadataStore
及其 DataService
。
由于管理器共享相同的 MetadataStore
,因此使用任一管理器获取元数据都可以解决问题。
查看 EntityManager 的 Breeze API 文档和 MetadataStore .
关于javascript - Breeze.js 如何在 2 个实体管理器之间共享元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23527845/