0

私のコードはこれです:

<div id="DivToUpdate">
    <div>
        SELECTED ROOM:
        <input type="text" id="currentRoom" /></div>
    <div id="messagesList">
        <table>
            <tbody data-bind="foreach: model.Messages">
                <tr data-bind="text: Message">
                </tr>
            </tbody>
        </table>
    </div>
</div>

<script type="text/javascript">
var viewModel = {};
$('#DivToUpdate').click(function () {
    $.getJSON("/ControllerAction/JsonPopulateMessages", { jsonRoom: $('#currentRoom').val() }, function (data) {
        var trueData = JSON.stringify(data);
        alert(trueData);
        viewModel.model = ko.mapping.fromJSON(trueData);
        ko.applyBindings(viewModel);
    });
});
  </script>

返された JSON データは次のような形式です。

 {"Messages":[{"Message":["yow!"]},{"Message":["hey!"]}]}

コードを実行して DivToUpdate をクリックしようとすると、何も表示されません...テーブルと行が空です..ビューモデルが正しくバインドされていないことを意味します..クロムのコンソールを見ると、次のように表示されます:

 NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7

私はノックアウトを学び始めています。これを修正する方法を教えていただければ幸いです...

4

1 に答える 1

2

JSON は少し奇妙に見えます。Message の値の前後の [] を削除してください。私はそれが文字列であるべきだと思いますよね?JSON をどのように生成していますか?

アップデート:

もう一度見てみると、テキストを tr 要素にバインドしようとしていることがわかりますが、tr には td 要素しか含めることができないため、tr 内に td を追加し、データを td- にバインドする必要があります。代わりに要素。

代わりにこれを試してください:

    <div id="messagesList">
        <table>
            <tbody data-bind="foreach: model.Messages">
                <tr>
                   <td data-bind="text: Message"></td>
                </tr>
            </tbody>
        </table>
    </div>
于 2012-06-23T08:03:45.287 に答える