我有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});
我知道我也必须用承诺来解决这个问题,所以在第一位经理加载元数据之前,第二位经理还没有建成。
我是否在正确的道路上?我的目标是消除额外的带宽来加载第二个管理器的元数据。感谢
答案 0 :(得分:2)
您实际上不必获取元数据来共享相同的MetadataStore。以下两个陈述是一个非常清晰的方法:
var em1 = new breeze.EntityManager('api/app');
var em2 = em1.createEmptyCopy();
我不想变聪明。我的观点是,MetadataStore
是元数据的容器,在EntityManager
创建后立即可用,并且在保存任何元数据之前已经明确定义。
createEmptyCopy()
方法"克隆"管理员没有复制其实体缓存内容。复制的属性包括经理MetadataStore
及其DataService
。
因为管理员共享相同的MetadataStore
,所以使用 管理器获取元数据就可以了。
查看EntityManager和MetadataStore的Breeze API文档。
答案 1 :(得分:1)
我以前从未使用过breeze.js,但是根据我从文档中收集的内容(http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html),这样的事情应该有效:
var mgr1 = new breeze.EntityManager('api/app');
mgr1.fetchMetadata();
var mgr2 = new breeze.EntityManager({
serviceName: 'api/app',
metadataStore: mgr1.metadataStore
});
当然,mgr2
承诺应在mgr1.fetchMetadata
承诺完成后设置,正如您在问题中所说的那样。