knockout.js在Internet Explorer中调用两次计算的observable

时间:2013-02-15 20:47:12

标签: knockout.js

请参阅下面的简单示例;绑定到计算的observable的文本框。我的问题是,当文本框更新时,IE会将写入方法调用两次。 Firefox和其他浏览器似乎没有这个问题。我在IE 7和IE中观察到了这个问题。 8。

首先,我做错了什么?如果没有,建议的处理方法是什么?

<script>
    var viewModel = {
        myTestVar: "aaa"
    };

    viewModel.myTest = ko.computed({
        read: function () {
            return viewModel.myTestVar;
        },
        write: function (value) {
            alert(value);
            viewModel.myTestVar = value;
        },
        owner: viewModel
    });

    $(document).ready(function () {
        ko.applyBindings(viewModel);
    });
</script>
</head>
<body>
   <input data-bind="value:myTest",type="text" style="width:150px;" />
</body>

2 个答案:

答案 0 :(得分:1)

value绑定有一个特殊部分,用于处理Internet Explorer中的自动完成。这通常会导致两次写入。如果您不关心自动完成,可以通过向input添加属性来关闭它:

<input data-bind="value:myTest" type="text" style="width:150px;" autocomplete="off" />

答案 1 :(得分:0)

试试这个:

write: function (value) {
    if(value != viewModel.myTestVar) {
        alert(value);
        viewModel.myTestVar = value;
    }
}

由于viewModel.myTestVar不是一个可观察的,我不知道为什么写两次调用,但检查应该阻止实际的多次写入。