【问题标题】:Breezejs - Metadata import error on IE8Breezejs - IE8 上的元数据导入错误
【发布时间】:2013-12-14 00:55:28
【问题描述】:

几个月来,我一直在使用 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 方法在客户端为使用自定义构造函数扩展的实体添加属性(如在微风文档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 方法的调用),但无济于事。

非常感谢您的宝贵支持!

【问题讨论】:

    标签: breeze


    【解决方案1】:

    更新:

    此问题已在 Breeze 1.4.7 中得到修复,现在可用。

    上一篇文章:

    这是一个错误。它将在下一个版本中修复。今天晚些时候还将在 GitHub 中签入一个修复程序(只需拉取微风.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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多