我正在尝试为学校做一个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>
答案 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
成语。