AngularJS不会在IE中将继承的属性序列化为JSON

时间:2014-06-11 04:19:12

标签: javascript json angularjs internet-explorer prototypal-inheritance

遇到一个奇怪的错误。

我有一个以角度方式绑定到对象的表单。此对象继承自包含所有表单中使用的字段的基本表单,例如FirstName,LastName等...

以下是如何设置的示例:

myApp.factory('BaseForm', function ()
{
    var BaseForm = function ()
    {
        Object.defineProperty(this, "Foo",
        {
            get: function () { return BaseForm.Foo; },
            set: function (newValue) { BaseForm.Foo = newValue; }
        });
    }

    //Foo is defined as both a static and instance property so value
    //can be shared across all instances, but also bound directly in view

    BaseForm.Foo= '';
    BaseForm.prototype = {
        Foo= ''
    };

    return BaseForm;
});

myApp.factory("ChildForm", ["BaseForm", function (BaseForm)
{
    var _base = BaseForm;

    var ChildForm = function ()
    {
        //call the base-level constructor to initialize core properties
        _base.apply(this, arguments);

        //... other child specific code here...
    };

    var _childProperties = {
        Bar: { enumerable: true, configurable: false, writable: true, value: '' }
    };

    ChildForm.prototype = Object.create(_base.prototype, _childProperties);
    ChildForm.prototype.constructor = ChildForm;

    return ChildForm;
}]);

当我在Chrome中提交表单时,所有属性(包括从基类继承的属性)都会正确序列化并通过网络发送。生成的JSON字符串如下所示:

"{ "Foo": "abc", "Bar": 123 }"

但是当我在IE(版本9-11)中提交相同内容时,没有任何继承的字段被序列化或发送,并且生成的JSON字符串如下所示:

"{ "Bar": 123 }"

我已经验证了值在模型中正确填充,它们只是没有在IE中序列化。任何人都可以帮助我理解为什么会发生这种情况以及我需要做些什么来解决它?

更新

所以,还没弄清楚为什么会发生这种情况,但在阅读this post之后,我在我的基类中添加了一个toJSON()覆盖方法,并且能够强制在所有浏览器中正确序列化。不理想,但是对现有代码影响最小的最快解决方案。但是,如果有人可以回答原因,那么最初的问题仍然存在。

以下是 PLUNK 演示行为:

谢谢!

0 个答案:

没有答案