Breeze - IE8中的元数据助手

时间:2014-03-22 14:40:11

标签: javascript internet-explorer-8 breeze require es5-shim

我在使用breeze.metadata-helper.js的Breeze中遇到了问题。我已经包含了es5-shim和sham库。它失败了:     makePropDescription(proto,property) 方法,在尝试执行时:     Object.defineProperty(proto,propName,descr) 与消息" getters&无法在此javascript引擎上定义setter"。

无法添加的属性是在以下内容中定义的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。

1 个答案:

答案 0 :(得分:0)

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

也就是说,此代码是免费提供的,您可以为IE8克隆和修改它。只是对IE8及以下版本的需求一直在稳步下降并试图编写符合IE8标准的组件是一件非常麻烦的事情,特别是一旦你习惯使用ES5兼容的javascript。