【问题标题】:Breeze 1.4.13 - error when loading entitiesBreeze 1.4.13 - 加载实体时出错
【发布时间】:2014-06-04 17:03:24
【问题描述】:

我已经升级到最新的微风版本,现在在`

 function movePropsToBackingStore(instance) {

    var bs = getBackingStore(instance);
    var proto = Object.getPrototypeOf(instance);
    var stype = proto.entityType || proto.complexType;
    stype.getProperties().forEach(function(prop) {
        var propName = prop.name;
        if (!instance.hasOwnProperty(propName)) return;
        // pulls off the value, removes the instance property and then rewrites it via ES5 accessor
        var value = instance[propName];
        delete instance[propName];
        instance[propName] = value;
    });
    return bs;
}

我遇到了异常,其中 - 无法在严格模式下删除属性!!! 对于我的一些实体,我已经使用计算属性注册了 CTORS

是否有解决方法或者它是一个错误?

ctor 示例

define(['sharedServices/dataRepository', 'sharedServices/enumRepository'], function (dataRepository, enumRepository) {
'use strict';

return function () {
    this.segments = undefined;
    var that = this;

    function isArray(value) {
        return value &&
            typeof value === 'object' &&
            typeof value.length === 'number' &&
            typeof value.splice === 'function' &&
            !(value.propertyIsEnumerable('length'));
    }

    function handlePropertySet(entityName, newState) {
        if ((isArray(newState) && newState.length === 0) || (!isArray(newState) && !newState.results)) {
            return;
        }
        var i = 0,
            value = isArray(newState) ? newState : newState.results;

        for (i; i < value.length; i++) {
            dataRepository.addUnchangedEntity(entityName, value[i]);
        }
    }

    function handlePropertyGet(enstate, ename) {
        if (that[enstate] === undefined || that[enstate] === null) {
            if (!that.entityAspect || !that.entityAspect.entityManager || !that.entityAspect.entityManager.isReady) {
                that[enstate] = null;
            } else {
                that[enstate] = that.entityAspect.entityManager.executeQueryLocally(new breeze.EntityQuery(ename).
                    where('VirtualTourID', 'eq', that.ID));
            }

        }

        return that[enstate] === null ? [] : that[enstate];
    }

    Object.defineProperty(this, 'Segments', {
        get: function () {
            return handlePropertyGet('segments', "VirtualTourSegments");
        },
        set: function (value) { //used only when loading tours from the server
            handlePropertySet('CVirtualTourSegment', value);
        },
        enumerable: true
    });

};

});

删除段时出错 我也在使用 IE11

【问题讨论】:

    标签: javascript breeze


    【解决方案1】:

    我无法重现您的问题。您可以发布一个具有无法删除属性的 ctor 示例吗?

    一般来说,严格模式实际上并不禁止删除属性实例。但是,请参阅:Why is delete not allowed in Javascript5 strict mode?

    【讨论】:

    • 添加到主帖
    • 如果在 Ctor 中我将使用 Intilizer 来创建帖子 - 会有帮助吗?
    • 向属性添加可配置:true - 修复它
    • 好的,我认为这是有道理的。我将尝试在 Breeze 文档中添加一些内容,以说明您必须使 ctor 中定义的任何 ES5 属性都可配置。并感谢您找到这个。
    • 我更新了"Extending Entities" topic 来澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2013-08-10
    • 2015-10-21
    • 2013-04-18
    • 2021-05-03
    相关资源
    最近更新 更多