使用BreezeJS和AngularJS访问NotMapped计算属性

时间:2013-06-26 14:43:32

标签: angularjs breeze

我已经按照http://www.breezejs.com/documentation/extending-entities中列出的示例进行了操作,标记为“未映射的属性的DocCode测试可以通过服务器类计算属性进行设置”。

当我尝试访问未映射的属性时,它具有与在构造函数中设置时相同的值。我已经验证服务器正在返回未映射的属性。在使用带有breezejs的angularjs时,我可能不知道访问未映射属性的正确方法。

请参阅下面两行我评论为“空字符串,预期值”。

breeze.NamingConvention.camelCase.setAsDefault();
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);

var ms = new breeze.MetadataStore();

var manager = new breeze.EntityManager({
    serviceName: 'breeze/Projects',
    metadataStore: ms
});

manager.enableSaveQueuing(true);
manager.fetchMetadata()
    .then(function () {
        var Sheet = function ()
        {
            this.previewUrl = "";
        }

        ms.registerEntityTypeCtor("Sheet", Sheet);

        var query = new breeze.EntityQuery("Project")
            .withParameters({ id: $stateParams.projectId });

        manager
            .executeQuery(query)
            .then(function (data)
            {
                var p = data.results[0]; // project
                var s = p.sheets[0];
                console.log(s["previewUrl"]); // empty string, value expected
                console.log(s.previewUrl);    // empty string, value expected
            })
            .fail(function (e)
            {
                console.log(e.message);
                alert(e);
            });
    });

修改:其他信息 我发现这是由camelCase命名约定引起的。我能够通过将getPropertyFromServerRaw函数改为此来修复breeze.js中的错误:

function getPropertyFromServerRaw(rawEntity, dp) {
    return rawEntity[dp.nameOnServer || dp.isUnmapped && rawEntity.entityType.metadataStore.namingConvention.clientPropertyNameToServer(dp.name)];
}

希望这个修复程序可以进入下一个版本的breeze.js

0 个答案:

没有答案