我在使用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。
答案 0 :(得分:0)
我非常确定breeze.metadata-helper插件不是为IE8设计的。 Breeze适用于IE8,但一般来说,大多数微风插件都没有经过IE8(及以下版本)的测试或认证,除非明确调出。这种情况下的具体问题是IE8不支持标准javascript类的Object.defineProperty。
也就是说,此代码是免费提供的,您可以为IE8克隆和修改它。只是对IE8及以下版本的需求一直在稳步下降并试图编写符合IE8标准的组件是一件非常麻烦的事情,特别是一旦你习惯使用ES5兼容的javascript。