使用int和null初始值敲除IE订阅问题

时间:2012-10-26 01:05:50

标签: c# .net knockout.js knockout-mapping-plugin

这是jsfiddle to demo it ...

dirtyFlag = function(root) {
    var _isDirty = ko.observable(false);
    root.isFilthy = function() {
        return _isDirty();
    };
    var result = ko.computed(function() {
        if (!_isDirty()) {
            ko.toJS(root);
        }
        return _isDirty();
    });

    result.subscribe(function() {
        if (!_isDirty()) {
            _isDirty(true);
            alert('dirty!');
        }
    });

    return result;
};

var viewModel = {
    dataObject: ko.observable()
};
var data = {
    "UserName": "TheName",
    "UserID": 2,
    "Notes": "Yeah!",
    "email": "booya@test.x"
};

viewModel.dataObject = ko.mapping.fromJS(data);
dirtyFlag(viewModel.dataObject);
ko.applyBindings(viewModel);

如果你看一下数据模型,那么UserID就是一个int,模型有一个订阅就可以在有变化的时候设置一个“脏”标志,然后我发出一个警告,你就知道它被标记的确切时间就这样。

输入包含id的输入字段,不要输入,不要更改,只需单击下一个框或选项卡即可。

如果您使用Firefox,Chrome等访问这个小提琴,它的行为与您预期的一样,没有任何反应。

现在使用IE访问它,为什么在离开UserID字段后它将模型标记为脏?如果其中一个值为null而不是int(将电子邮件更改为null以查看),则仅在IE中具有相同的效果

在真实场景中,我正在使用已经序列化为js的ac#对象,并且所有这些都可以100%正常工作,直到我手动订阅,并且这只会在IE中发生(目前正在运行IE9但在各种情况下尝试过旧版本的模式/仿真)

非常感谢任何见解......谢谢!

0 个答案:

没有答案