未捕获的TypeError:无法读取null的属性“nodeType”

时间:2015-04-28 17:27:53

标签: javascript knockout.js

我正在尝试为学校做一个knockout.js项目,我需要将一个可观察的数组绑定到一个选择的下拉列表。以下代码不起作用,并在applyBindings行上显示此错误:

  

未捕获的TypeError:无法读取null的属性'nodeType'

有什么想法吗?这是我的代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <script src="knockout.js"></script>
    <script>
        function ViewModel() {
            var self = this;
            self.options1 = ko.observableArray([{id: 0, name: "Example option"}]);
        }
        ko.applyBindings(new ViewModel());
    </script>
  </head>
  <body>
    <!-- page content -->
    <select data-bind="options: options1"/>
  </body>
</html>

1 个答案:

答案 0 :(得分:3)

在确定已加载DOM之前,不应调用ko.applyBindings。目前,在您的代码中,您可以在该行代码命中时执行applyBindings。此时,浏览器甚至还没有遇到body标记,因此它不知道要绑定的内容。

快速解决方法是:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <script src="knockout.js"></script>
  </head>
  <body>
    <select data-bind="options: options1"/>
    <!-- page content -->
    <script>
        function ViewModel() {
            var self = this;
            self.options1 = ko.observableArray([{id: 0, name: "Example option"}]);
        }
        ko.applyBindings(new ViewModel());
    </script>
  </body>
</html>

或者,您可以将所述代码推迟到DOM加载之前。如果您还在项目中使用jQuery,那么可以使用$(document).ready成语。