我已经使用Breezejs运行了几个月的项目,并且当我更新到最新版本(“1.4.5”)并且元数据导入停止在IE8上工作时,一切都运行良好。
我之前使用的是版本“1.3.6”,它在IE8中运行正常(我已经按照建议添加了es5-shims和json2库,用于“传统”浏览器支持)。
然而,由于我升级到最新版本,在初始化新实体管理器并发出第一个查询时,它返回以下错误:
Unable to either parse or import metadata: [Object expected]
ctor.prototype.fetchMetadata 方法中的。
追踪这个问题,我发现它无法在使用自定义构造函数扩展的实体的客户端添加属性上运行 getES5PropDescriptor 方法(如上所述) Breeze文档here):
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上再次使用它的任何提示?
我也尝试过this post的建议(基本上注释掉 isolateES5Props 方法的调用),但无济于事。
非常感谢您的宝贵支持!
答案 0 :(得分:0)
自Breeze 1.4.7开始修复,现已上市。
这是一个错误。它将在下一个版本中修复。修复程序也将在今天晚些时候检入GitHub(只需拉动breeze.xxx.js文件)。现在,您可以通过添加以下函数来修改breeze.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
}