2013-11-23 12 views
9

Ich bin ein komplettes noob in knockoutjs und ich habe ein Problem von Anfang an. Ich habe alles in der Installationsanleitung beschrieben, aber ich kann es nicht funktionieren.Kann nicht knockout running

Mein HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 
<HTML> 
    <HEAD> 
     <script type='text/javascript' src='js/knockout-3.0.0.js'></script> 
     <script type='text/javascript' src='js/myTasks.js'></script> 
     <TITLE>Your Tasks</TITLE> 
    </HEAD> 
    <BODY> 
    <p>First name: <strong data-bind="text: firstName"></strong></p> 
    <p>Last name: <strong data-bind="text: lastName"></strong></p> 
    </BODY> 
</HTML> 

Meine Viewmodel - in der myTasks.js Datei enthalten:

function AppViewModel() { 
    this.firstName = "Bert"; 
    this.lastName = "Bertington"; 
} 
ko.applyBindings(new AppViewModel()); 

Was ich bekomme ist:

First name: 

Last name: 

Der obige Code ist der Code im ersten knockoutjs-Tutorial verwendet.

Warum kann ich es nicht ausführen? Ich weiß, dass ich etwas sehr kleines vermisse, aber ich kann es nicht erkennen.

+0

'$ (Dokument) .ready (function() {});'? Und Entwicklerkonsole –

+1

@u_mulder Btw die Konsole sagt: 'TypeError: c ist null' – chility

Antwort

19

Wrap Sie KO-Code in $(document).ready(function() {});

$(document).ready(function() { 
    function AppViewModel() { 
     this.firstName = "Bert"; 
     this.lastName = "Bertington"; 
    } 
    ko.applyBindings(new AppViewModel()); 
}); 

Und vergessen Sie nicht jquery selbst aufzunehmen.

+0

Nur die letzte KO-Zeile muss innerhalb' document.ready() 'sein. Die Funktion (en) wie 'AppViewModel()' können außerhalb davon sein. – Roland

17

Ich weiß, dass diese Frage vor langer Zeit beantwortet wurde, aber es ist eine der Top-Suchen bei Google bei der Suche nach Lösungen zu diesem Thema. Sie sollten nicht müssen JQuery mit knockout.js verwenden, wie von der angenommenen Antwort impliziert wird. Eine bessere Lösung wäre, nur das Skript-Tag verweisen myTask.js auf der Unterseite des Körpers zu bewegen:

<BODY> 
<p>First name: <strong data-bind="text: firstName"></strong></p> 
<p>Last name: <strong data-bind="text: lastName"></strong></p> 
<script type='text/javascript' src='js/myTasks.js'></script> 
</BODY> 

Dies sollte Ihr Code Ansichtsmodell ermöglichen, ohne arbeiten zu müssen jQuery aufzunehmen.

+1

Danke. Dies war eine viel bessere Lösung, da keine externe Abhängigkeit mehr erforderlich ist. –