3

我遵循了http://www.breezejs.com/documentation/extending-entities中列出的示例,并且标记为“未映射属性可以由服务器类计算属性设置”的 DocCode 测试。

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

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

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 函数更改为以下内容,我能够修复微风.js 中的错误:

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

希望这个修复可以让它进入下一个版本的微风.js

4

0 回答 0