2013-02-26 62 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> 
相關問題