我已经尝试钻进对象并查看文档,但没有找到任何东西。我创建了一个实体,我需要手动分配一些属性。我在对象上看到_backingStore
和entityAspect
...我知道属性名称,但不知道如何通过breeze实体设置它们。
如果它很重要,我正在创建一个新对象,然后从另一个对象复制属性以便于克隆。
function createDocument() {
var manager = datacontext.manager;
var ds = datacontext.serviceName;
if (!manager.metadataStore.hasMetadataFor(ds)) {
manager.fetchMetadata(ds).then(function () {
return manager.createEntity("Document");
})
}
else {
return manager.createEntity("Document");
}
}
function cloneDocument(doc) {
var clonedDocument = createDocument();
// Copy Properties Here - how?
saveChanges()
.fail(cloneFailed)
.fin(cloneSucceeded);
}
答案 0 :(得分:2)
不知道您的属性可能是什么,这里有两个场景 -
function cloneDocument(doc) {
var clonedDocument = createDocument();
clonedDocument.docId(doc.docId());
clonedDocument.description(doc.description());
saveChanges()
.fail(cloneFailed)
.fin(cloneSucceeded);
}
这里有一些注意事项 - 我假设您正在使用Knockout并需要设置属性。如果你没有使用Knockout,那么你可以删除parans并使用equals -
clonedDocument.docId = doc.docId;
我相信如果你没有使用Knockout(vanilla js)并且你使用的是Angular,这是真的,但是我还没有使用Breeze和Angular,所以请耐心等待。
答案 1 :(得分:2)
这是另一种无论模型库(Angular或KO)如何都有效的方法
function cloneDocument(doc) { var manager = doc.entityAspect.entityManager; // get it from the source // Check this out! I'm using an object initializer! var clonedDocument = manager.createEntity("Document", { description: doc.description, foo: doc.foo, bar: doc.bar, baz: doc.baz }); return clonedDocument; }
但是要小心这个:
clonedDocument.docId = doc.docId; // Probably won't work!
同一个经理中同一类型的两个实体不能拥有相同的密钥。
额外信用:编写一个实用程序,将一个实体的属性复制到另一个实体,而不复制entityAspect
或密钥(id),并可选择克隆从属导航的实体(例如,订单的订单行项目。)