3

请看下面的简单示例;绑定到计算的 observable 的文本框。我的问题是 IE在文本框更新时调用了两次write方法。Firefox 和其他浏览器似乎没有这个问题。我在 IE 7 和 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>
4

2 回答 2

1

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

<input data-bind="value:myTest" type="text" style="width:150px;" autocomplete="off" />
于 2013-02-15T21:11:03.443 回答
0

试试这个:

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

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

于 2013-02-15T21:01:53.697 回答