我已经使用Breezejs运行了几个月的项目,直到我更新到最新版本("1.4.5"),元数据导入停止在IE8上工作时,一切都很好。
我以前使用的是"1.3.6"版本,它在IE8中运行良好(我根据建议添加了es5垫片和json2库,以支持"遗留"浏览器)。
然而,由于我升级到了最新版本,当初始化新的实体管理器并发出第一个查询时,它返回以下错误:
Unable to either parse or import metadata: [Object expected]
在ctor.protype.fetchMetadata方法中。
追踪到这个问题,我了解到它无法在客户端上运行getES5PropDescriptor方法为使用自定义构造函数扩展的实体添加属性(如Breeze文档中所述):
function getES5PropDescriptor(proto, propName) {
if (proto.hasOwnProperty(propName)) {
//next line throws the error!!!
return Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(proto, propName);
} else {
var nextProto = Object.getPrototypeOf(proto);
return nextProto ? getES5PropDescriptor(nextProto, propName) : null;
}
}
这是Breezejs已知的问题吗?有什么关于如何在最新Breezejs版本的IE8上再次运行的提示吗?
我也尝试过这篇文章中的建议(基本上是注释掉了isolateES5Props方法的调用),但没有用。
非常感谢您的宝贵支持!
更新:
此问题已在微风1.4.7中得到修复,现在可用。
上一篇:
这是一个bug。它将在下一个版本中修复。今天晚些时候还将在GitHub中检查一个修复程序(只需提取bread.xxx.js文件)。现在,您可以通过添加以下函数来修改bread.debug.js。
function canIsolateES5Props() {
try {
return Object.getPrototypeOf && Object.defineProperty({}, 'x', {});
} catch (e) {
return false;
}
}
并在getES5PropDescriptor函数的顶部调用它。
function getES5PropDescriptor(proto, propName) {
if (!canIsolateES5Props()) return null;
...
// code from above
}