为了减少breeze元数据的大小,我们计划制作基于实体的元数据。这样每个实体元数据都将按需从服务器下载。
以前,元数据是通过微风(正常行为)下载的,它对我们来说很好。为了实现元数据的按需加载,我尝试了“importMetadata”功能。但是“entityManager.HasChanges()”总是返回“false”,但用户输入数据存在于json实体中。
我使用下面的代码片段来做同样的事情。
constructor(private bwhttp: BWHttp) {
this.em = new EntityManager(this.serviceName);
this.em.dataService.hasServerMetadata = false;
this.em.saveOptions = new SaveOptions({ allowConcurrentSaves: true });
}
public getData(data: string, formType?, args?, system?, taxtype?) {
this.bwhttp.get("http://someserver.cdn.com/metadata/"+formType+".json").subscribe(httpdata => {
var metadata = JSON.stringify(httpdata['_body']);
this.em.metadataStore.importMetadata(metadata, true);
this.getDataInternal(data, formType, args, system, taxtype);
});
}
public saveChanges(propertyName: string) {
this.applyPropertyChanges(propertyName);
if (!this.em.hasChanges()) return;//it always gives false.
this.em
.saveChanges()
.then(result => {
this.status = "Changes Saved."
this.hassaved.next(true);
})
.catch(err => {
this.status = "Error:" + err.toString();
this.em.rejectChanges();
});
}
我错过了什么吗?请帮帮我。