2013-02-26 3 views
31

Heute ist der erste Tag für mich in Knockout. Habe es getroffen. Unten ist mein erster Beispielcode, der knockout.js verwendet und es zeigt einen Fehler an.Warum erhalte ich bei Knockout JS den Fehler "Kann die Eigenschaft 'nodeType' von null nicht lesen"?

Kann mein Skript Eigenschaft 'nodeType' von null

Hier wird nicht gelesen: `

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

Hier ist mein 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> 

ich das wissen wollen Grund für den obigen Fehler und wie man es überwinden kann ...

Antwort

43

Wenn Sie Ihren Code so einrichten, wird es funktionieren.

<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

Yup es funktioniert gut .. Aber kann ich den Grund wissen .. ?? –

+11

HTML wird von oben nach unten analysiert. Wenn Sie also die Skripte oben auf der Seite einfügen (z. B. ''), könnten sie ausgeführt werden, bevor einige oder alle Seitenelemente zur Interaktion bereit sind. Es gibt andere Möglichkeiten, dies zu tun (reagieren auf DOM-ready-Ereignisse), aber den Code ganz unten zu setzen, macht dasselbe. – FakeRainBrigand

+1

Noch ein Tipp: '' Elemente haben kein schließendes Tag. In html schreiben Sie sie einfach wie '' oder '' in XHTML. – FakeRainBrigand

32

Wenn Sie Ihr <script> am oberen Rand der Seite halten möchten, können Sie jQuery bereit() Funktion verwenden, um die Initialisierung zu verzögern, bis die Seite geladen wurde.

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

Ich weiß nicht, ob es funktioniert ... Wie auch immer, vielen Dank für Ihre wertvolle Antwort ... !!! –

+4

Ja, es funktioniert. Ich hatte den gleichen Fehler wie du und diese Seite half mir, es mit $ .ready() zu lösen. –

1

Ich denke ko.applyBindings (obj); sollte unter Ansichtsmodell schreiben.

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