如何在breeze实体客户端设置属性?

时间:2013-08-13 15:15:07

标签: breeze

我已经尝试钻进对象并查看文档,但没有找到任何东西。我创建了一个实体,我需要手动分配一些属性。我在对象上看到_backingStoreentityAspect ...我知道属性名称,但不知道如何通过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);
 }

2 个答案:

答案 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),并可选择克隆从属导航的实体(例如,订单的订单行项目。)