2

コード:-

<html>
    <head>
    <script type="text/javascript" src="http://knockoutjs.com/downloads/knockout-2.3.0.js"></script>
    </head>
    <body>
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>InputType</th>
            </tr>
        </thead>
        <tbody data-bind="foreach: settings">
            <tr>
                <td data-bind="text: name"></td>
                <td><input data-bind="attr: {type: dtype}"/></td>
            </tr>
        </tbody>
    </table>
    <script type="text/javascript">
    var viewModel = function(){
        this.settings = ko.observableArray([{name: "Bungle",dtype:"text"},{name: "George",dtype: "checkbox"},{name: "Zippy",dtype:"text"}]);
    };

ko.applyBindings(new viewModel());
</script>
</body>
</html>

上記のコードは、フィドルhttp://jsfiddle.net/uByVQ/にもキャプチャされています。一方、フィドルでキャプチャされたシナリオは、Chrome では問題なく動作しますが、IE8 では正しく動作しません。エラーが発生します

「このコマンドはサポートされていません」。

ノックアウト2.3を使用しています

誰かが私に回避策を教えてもらえますか?

ありがとう。

4

1 に答える 1

5

IE では、一度 DOM に追加された入力要素の型を変更できないようです。

type プロパティは一度だけ読み取り/書き込みできますが、入力要素が createElement メソッドで作成されたとき、およびドキュメントに追加される前にのみです。

http://msdn.microsoft.com/en-us/library/ms534700.aspx

新しい要素を作成して既存の要素を削除するという厄介な回避策がいくつかありますが、それを実現するにはカスタム ノックアウト バインダーを作成する必要があります。

if あなたはバインディングでそれを回避することができます:

<tr>
    <td data-bind="text: name"></td>
    <td>
        <span data-bind="if: dtype=='checkbox'"><input  type='checkbox' /></span>
        <span data-bind="if: dtype=='text'"><input  type='text' /></span>
    </td>
</tr>

参照: http://jsfiddle.net/GQEs5/

しかし、これは本当に不十分で冗長です。

また、モデルにプレゼンテーションの詳細を含めることは哲学的に不純であることも付け加えておきますが、あなたのアプローチの実用的な利点は間違いなく認識しています。

于 2013-08-14T19:26:29.383 に答える