0

我已经尝试深入研究对象并查看文档,但没有找到任何东西。我创建了一个实体,我需要手动分配一些属性。我懂了_backingStoreentityAspect在对象上......我知道属性名称但不知道如何通过微风实体设置它们。

万一这很重要,我将创建一个新对象,然后从另一个对象复制属性以方便克隆。

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);
 }
4

2 回答 2

2

这是另一种不管模型库(Angular 或 KO)如何都有效的方法

功能克隆文档(文档){

    var manager = doc.entityAspect.entityManager; // 从源中获取

    // 看一下这个!我正在使用对象初始化程序!
    var clonedDocument = manager.createEntity("文档", {
        描述:doc.description,
        富:doc.foo,
        酒吧:doc.bar,
        baz: doc.baz
    });

    返回克隆文档;
}

请注意

clonedDocument.docId = doc.docId; // 可能行不通!

同一管理器中相同类型的两个实体不能具有相同的键。

额外的信用:编写一个实用程序,将一个实体的属性复制到另一个实体,而不复制entityAspect或键(id),并可选择克隆依赖导航的实体(例如,订单的订单行项目)。

于 2013-08-14T06:38:19.237 回答
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 一起使用,所以请耐心等待。

于 2013-08-13T15:33:06.763 回答