0

我在 IE8 中使用 Breeze.metadata-helper.js 时遇到问题。我已经包含了 es5-shim 和 sham 库。它在尝试执行时失败:makePropDescription(proto, property) 方法:Object.defineProperty(proto, propName, descr) 带有消息“getters & setters can not be defined on this javascript engine”。

它未能添加的属性是 DeclarationID 定义在:

define([], function () {
var dt = breeze.DataType;
var defaultNamespace = 'Our.Custom.Namespace';



// Breeze Labs: breeze.metadata.helper.js
var helper = new breeze.config.MetadataHelper();
var addDataService = helper.addDataService.bind(helper);
var addTypeToStore = helper.addTypeToStore.bind(helper);
var setDefaultNamespace = helper.setDefaultNamespace.bind(helper);

var createMetadataStore = function () {
    return new breeze.MetadataStore();
};

var addDeclaration = function (store) {

    var et = {
        shortName: "Declaration",
        namespace: defaultNamespace,
        defaultResourceName: "Declaration",

        dataProperties: {
            DeclarationID: { dataType: dt.Int64, isPartOfKey: true },
            MRN: { dataType: dt.String },
            IssuingDate: { dataType: dt.DateTime },
            DeclarationStateCode: { dataType: dt.String },
            DeclarationStateID: { dataType: dt.Int64 },
            DeclarationType: { dataType: dt.String }

        }


    };

    return addTypeToStore(store, et);

};
   var initialize = function (dataService) {
   var store = createMetadataStore();
   addDataService(store, dataService);
   setDefaultNamespace(defaultNamespace);
   addDeclaration(store);  

   return store;
};

return {
    initialize: initialize
};
});

我正在使用 Breeze v1.4.11 和 Metadata-Helper v1.0.5。

4

1 回答 1

0

我很确定微风.metadata-helper 插件不是为 IE8 设计的。Breeze proper 将适用于 IE8,但一般来说,大多数 Breeze 插件都没有针对 IE8(及以下)进行测试或认证,除非明确指出。这种情况下的具体问题是 IE8 不支持标准 javascript 类的 Object.defineProperty。

也就是说,此代码是免费提供的,您可以为 IE8 克隆和修改它。只是对 IE8 及以下版本的需求一直在稳步下降,尝试编写兼容 IE8 的组件确实很麻烦,尤其是当您习惯使用兼容 ES5 的 javascript 时。

于 2014-03-22T19:57:31.197 回答