我已经按照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