2013-02-26 45 views
31

今天是我在淘汰赛中的第一天。对它感到震惊。下面是我使用knockout.js的第一个示例代码,它显示一个错误。为什么我用Knockout JS得到“Can not read property'nodeType'null”错误?

无法读取空的特性 '节点类型'

这里是我的脚本:`

function ViewModel() 
    { 
    var self = this; 
    self.n1 = ko.observable(10); 
    self.n2 = ko.observable(10); 
    self.n3 = ko.observable(10); 
    } 
    ko.applyBindings(new ViewModel()); ` 

这里是我的html:

<body> 
<p>Number1:<input data-bind="value:n1"></input></p> 
<p>Number2:<input data-bind="value:n2"></input></p> 
<p>Number3:<input data-bind="value:n3"></input></p> 
</body> 

我想知道上述错误的原因以及如何克服它...

回答

43

如果你这样设置你的代码,它会起作用。

<body> 
<p>Number1:<input data-bind="value:n1"></p> 
<p>Number2:<input data-bind="value:n2"></p> 
<p>Number3:<input data-bind="value:n3"></p> 
<script src="knockout.js"></script> 
<script> 

function ViewModel() { 
    var self = this; 
    self.n1 = ko.observable(10); 
    self.n2 = ko.observable(10); 
    self.n3 = ko.observable(10); 
} 

ko.applyBindings(new ViewModel()); ` 

</script> 
</body> 
+1

是的,它的工作现在好了..但我可能知道原因.. ?? – 2013-02-26 13:18:50

+11

HTML从顶部到底部被解析。因此,如果您将脚本包含在页面顶部(例如''部分),则可以在部分或全部页面元素准备好与之交互之前运行这些脚本。还有其他方法可以做到这一点(响应DOM就绪事件),但将代码放在底部也是一样的。 – FakeRainBrigand 2013-02-26 13:22:11

+1

另一个提示:''元素没有结束标记。在html中,您只需在XHTML中将它们写为'“或”'“。 – FakeRainBrigand 2013-02-26 13:24:02

32

如果你想保持你的<script>在页面的顶部,您可以使用jQuery的ready()函数来延迟初始化,直到页面加载。

$(document).ready(function() { 
    ko.applyBindings(new ViewModel()); 
}); 
+0

我不知道它是否工作...无论如何谢谢你的宝贵答案... !!! – 2013-07-08 03:19:10

+4

是的,它的工作原理。我和你有同样的错误,这个页面帮助我用$ .ready()解决它。 – 2013-07-09 07:19:33

1

我觉得ko.applyBindings(obj);应该写下查看模型。

<!DOCTYPE html> 
<html> 
<head> 
    <title>KO Examples</title> 
    <script type='text/javascript' src='knockout-3.1.0.js'></script> 
    <script type='text/javascript' src='jquery.js'></script> 
    <script type='text/javascript'> 
     var obj = { 
      first_name : 'Gazal Irish' 
     }; 


    </script> 

</head> 
<body> 
<div> 
    <p>My name : <span data-bind="text: first_name"></span> 
<p> 
</div> 
<script type="text/javascript"> 

    ko.applyBindings(obj); 
</script> 

</body> 
</html> 
相关问题