2012-04-01 4 views
4

Ich möchte meine Daten außerhalb meines Ansichtsmodells zugänglich machen. Also habe ich ein View-Model-Objekt erstellt, aber ich habe Probleme, seine Eigenschaften zu binden. Beachten Sie, dass in meinem Ansichtsmodell alles ordnungsgemäß funktioniert.Knockout.js Aufrufmethode außerhalb der Ansicht Modell

Im Grunde eine vereinfachte Pseudocode:

function Users() { 
    name; 
    date; 
} 

function userHealthModel() { 
    function createUsers() { new Users[] }; 
} 

self.userModel = ko.observable(new userHealthModel()); 
self.userModel.createUsers(); 

Wenn ich die createUsers Methode in meinem Modell nennen meine binden funktioniert gut.

hier ein jsFiddle ist, beachten Sie mein Problem am Ende des JS ganzen Weg ist, sagte ich es: http://jsfiddle.net/fourgates/jpk22/1/

Ich bin neu in JS und KO. nicht wirklich sicher, wie man $ root, $ parent usw. verwendet. Bitte helfen Sie einem anderen Programmier-Enthusiasten! Vielen Dank im Voraus!

+0

Bitte stellen Sie eine bestimmte Frage, anstatt nur einen großen Haufen Code zu posten, der irgendwie "nicht funktioniert". Du hast schon viel aufgebaut, also wo genau kämpfst du? – Niko

+0

Entschuldigung bitte entschuldigen Sie meine Faulheit Ich war sehr müde, als ich dies schrieb, nur ein Nickerchen gemacht. Ich schrieb meine Frage mit einem Finger neu. aber im Grunde habe ich Probleme beim Binden von Eigenschaften eines ViewModel-Objekts, das ich gemacht habe, außerhalb meines Ansichtsmodells. –

Antwort

10

Ich bin immer noch nicht zu 100% sicher, ob ich verstehe, was Sie zu tun versuchen, aber hier sind einige Gedanken über den Code in Ihrer Geige:

Wenn Sie so etwas wie

var self = this; 

im globalen Gültigkeitsbereich (= nicht in einer Funktion), this verweist auf das Fensterobjekt. Daher ergibt das keinen Sinn.

self.userModel = ko.observable(new userHealthModel()); 

Das Erstellen einer Observablen eines Ansichtsmodells ist nicht notwendig - Sie erwarten nicht, dass sich das gesamte Modell ändert, oder? Es wird immer ein Benutzermodell bleiben und nicht plötzlich ein "Nachrichtenmodell" oder was auch immer werden.

Wenn Sie eine Methode Ihrer Ansicht Modell von außen anrufen möchten, nur eine Instanz machen:

var userModel = new userHealthModel(); 
userModel.createUsers(); 

// Use "userModel" to access the methods and properties 
// like you're using "self" inside the view model: 
userModel.users2()[1].userId(5); 

// now apply the binding to THE SAME view model 
ko.applyBindings(userModel); 

http://jsfiddle.net/jpk22/3/

Wenn dies nicht das, was Sie suchen, lassen Sie mich wissen, !

+0

danke das ist genau das, was ich versucht habe zu tun! das macht Sinn, dass das Modell nicht beobachtbar wäre. Vielen Dank für die Hilfe! –