2016-08-03 10 views
0

Ich habe Eltern Modell person. Das Ansichtsmodell hat ein beobachtbares Array von person. Um eine Person zu bearbeiten/hinzufügen, habe ich ein jQuery UI-Dialogfeld (Ok/Abbrechen).Knockout Update vom jQuery UI Dialog abbrechen

var viewModel = function(){ 
    var self = this; 
    self.personEntry = ko.observable(new person()); 
    self.people = ko.observableArray(); 
    self.populatePeople = function(jsonPeopleObj){//adds person objects to people array}; 
}; 

Das personEntry Submodell wird den Dialog jQuery UI gebunden Verwendung with binden. Eine Tabelle wird unter Verwendung der foreach-Bindung auf dem people beobachtbaren Array erzeugt.

Jetzt, wenn ich versuche, einen Datensatz zu ändern, rufe ich die folgende Funktion auf Klick der Zeile.

function rowSelected(item,event){ 
    viewModel.personEntry(item); 
    openDialog(); 
} 

Dies öffnet den Dialog mit den Details der ausgewählten Zeile im jQuery UI-Dialogfeld. Wenn ich jedoch einen Wert ändere und dann im Dialogfeld auf Abbrechen klicke, wird die Tabelle immer noch mit einem neuen Wert geändert, der nicht passieren sollte. Irgendwelche Gedanken?

Ich kann einen Beispielcode bei Bedarf setzen.

+0

Sie * absolut * verwenden sollten [Knockout-jQueryUI] (http://gvas.github.io/ knockout-jqueryui /), das gut funktionierende Knockout-Bindungen für die verschiedenen jQuery UI-Standardwidgets bereitstellt. Bevor Sie etwas anderes tun, sehen Sie sich [das Beispiel für das Dialog-Widget] an (http://gvas.github.io/knockout-jqueryui/dialog.html). Befreien Sie sich von Ihren benutzerdefinierten Click-Event-Handlern und versuchen Sie stattdessen, auf diese Weise zu arbeiten. Wenn das Problem weiterhin besteht, fügen Sie Ihrer Frage Beispielcode hinzu. – Tomalak

+0

Ich habe dieses Problem gelöst, indem ich eine neue Instanz des Personenobjekts erstellt habe und ihm die Werte aus dem Objekt zugewiesen habe. Dann übergebe ich dieses neue Personenobjekt an den Eintrag personEntry. Dies hat es behoben – Ramki

+0

Für gutes Karma können Sie Ihre Arbeitslösung und zusammen mit einem kleinen Absatz der Erklärung als Antwort veröffentlichen. Vielleicht wird es jemand anderes in Zukunft nützlich finden. – Tomalak

Antwort

0

ich dies um mit ein bisschen Arbeit gelöst haben ...

https://jsfiddle.net/ramkiFiddle/v29exev5/59/

self.amendDetails = function(item, event) { 
    itemProgressed = item; 
    operation = 'Amend'; 
    var tempObj = new Person(item.Name(), item.Age()); 
    pageModel.personEntry(tempObj); 
    $("#personEntry").dialog('open'); 
    }