3

以下の簡単な例をご覧ください。計算されたオブザーバブルにバインドされたテキスト ボックス。私の問題は、テキスト ボックスが更新されたときにIE がwriteメソッドを 2 回呼び出すことです。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 でオートコンプリートを処理するための特別なセクションがあります。これにより、2 回の書き込みが発生することがよくあります。に属性を追加することで、オートコンプリートを気にしない場合はオフにすることができます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 はオブザーバブルではないため、書き込みが 2 回呼び出される理由はよくわかりませんが、チェックによって実際の複数の書き込みが防止されるはずです。

于 2013-02-15T21:01:53.697 に答える