【问题标题】:knockout error, viewmodel not bound敲除错误,视图模型未绑定
【发布时间】:2012-06-25 10:30:18
【问题描述】:

我的代码是这样的:

<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 时,我什么也看不到...表和行是空的.. 意味着 viewmodel 没有正确绑定.. 当我查看 chrome 的控制台时,它说:

 NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7

我开始学习淘汰赛,如果你能告诉我如何解决这个问题,我将不胜感激......

【问题讨论】:

  • 是否有理由将数据映射到 viewModel.model 而不是直接映射到 viewModel 根目录? viewModel 是否也包含其他数据?否则看起来有点混乱。
  • 我想使用敲除,以便页面可以更新而无需重新加载或刷新

标签: jquery mvvm knockout.js viewmodel knockout-mapping-plugin


【解决方案1】:

您的 JSON 看起来有点奇怪,请删除 Message 值周围的 []。我想它应该是一个字符串吧?你是如何生成 JSON 的?

更新:

再看的时候,发现你尝试将文本绑定到tr-element,但是一个tr只能包含td-elements,所以你需要在你的tr中添加一个td,并将​​数据绑定到td 元素代替。

试试这个:

    <div id="messagesList">
        <table>
            <tbody data-bind="foreach: model.Messages">
                <tr>
                   <td data-bind="text: Message"></td>
                </tr>
            </tbody>
        </table>
    </div>

【讨论】:

  • 啊哈哈...我和我的朋友都在笑...我们需要回到 HTML 基础...谢谢先生!
  • 我的荣幸,一开始我也错过了!
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
相关资源
最近更新 更多