javascript - 未捕获的类型错误 : Cannot read property 'nodeType' of null

标签 javascript knockout.js

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

Uncaught TypeError: Cannot read property 'nodeType' of null

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

<!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>

最佳答案

在确定 DOM 已加载之前,不应调用 ko.applyBindings。目前,在您的代码中,您会在该行代码命中时立即执行 applyBindings。此时,浏览器还没有遇到 body 标记,因此它不知道要绑定(bind)到什么。

快速解决方法是:

<!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 习惯用法。

关于javascript - 未捕获的类型错误 : Cannot read property 'nodeType' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926061/

相关文章:

javascript - 将切片与由 Knockout 的映射插件创建的数组一起使用

javascript - 如何在使用 ko.utils.arrayForEach 时获取索引值

javascript - 在 Yii 中,将 PHP 变量传递给 JavaScript

javascript - 将脚本添加到窗口对象的最佳方法?

javascript - 在 JQuery 文件中获取 WordPress 帖子 ID

javascript - PDF 文档到 WebAPI 供下载

javascript - knockout :bind multiple html elements with same viewModel's property

javascript - Vue js - 找不到图像源时设置替代图像

javascript - 在线展示3D模型

javascript - 如何将 JavaScript 对象复制到临时变量中,以便在更改属性后恢复原始对象?