JqueryMobile Knockout和Uncaught错误:NOT_FOUND_ERR:DOM异常8

时间:2012-11-10 07:36:27

标签: jquery-mobile knockout.js

我正在尝试使用knockout和jquerymobile而无法让它工作。 这是我的代码:

<!DOCTYPE html>     
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <script src="/nw/scripts/jquery-1.8.2.js"></script>
    <script src="/nw/scripts/knockout-2.1.0.debug.js"></script>
    <script src="/nw/scripts/jquery.mobile-1.2.0.js"></script>
    <link rel="stylesheet" href="/nw/scripts/jquery.mobile-1.2.0.css" />
        <title>title</title>
</head>
    <body>
        <div>
<script type="text/javascript">
    function AppViewModel() {
        this.test = [{ "name": "noam", "age": "36" }, { "name": "yael", "age": "34"}];
    }
    $(document).ready(function () { 
        ko.applyBindings(AppViewModel());
        });
</script>
<ul data-bind="foreach: test" id="myList">
    <li>test <span data-bind="text: name"></span></li>
</ul>
        </div>
    </body>
</html>

当我运行时,我收到以下错误: 未捕获错误:NOT_FOUND_ERR:DOM异常8

当我注释掉jquerymobile脚本时,它可以工作。

任何帮助都是适当的

1 个答案:

答案 0 :(得分:0)

问题的直接原因是放置<script>块,其中ko.applyBindings被调用。如果您将<script>块移动到<head>标记中,该示例将按原样运行,如下所示:(还请注意使用pageinit事件和data-role="page"属性)

<!DOCTYPE html>     
<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
  <script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.debug.js"></script>
  <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
  <title>title</title>
  <script type="text/javascript">
    function AppViewModel() {
      this.test = [{ "name": "noam", "age": "36" }, { "name": "yael", "age": "34"}];
    }
    $(document).bind('pageinit', function () {
      ko.applyBindings(AppViewModel());
    });
  </script>
</head>
  <body>
    <div data-role="page">
      <ul data-bind="foreach: test" id="myList">
        <li>test <span data-bind="text: name"></span></li>
      </ul>
    </div>
  </body>
</html>

请记住,jquery mobile和knockout都会改变DOM,而DOM错误则是它们之间发生冲突的症状,其中一个库移动了另一个随后试图解决的DOM元素。

要让JQM和knockout一起工作(他们这样做),你需要非常熟悉JQM何时/如何对DOM进行更改。 This page可能是一个很好的起点。