我遵循了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