2013-04-12 13 views
9

Używam knockoutjs z chronioną obserwacją i mam problem z polami wyboru. Jedna implementacja chronionych obserwowalnych można znaleźć here, ale jest kilka takich, które widziałem, są bardzo podobne.Jak korzystać z chronionych knockoutjs obserwowalnych z polami wyboru?

JsFiddle, który pokazuje mój problem, można znaleźć here. Oto część skrzypiec.

var ViewModel = function() { 
    var self = this; 

    self.protectedBool = ko.protectedObservable(true); 
    self.commit = function(){ 
     ko.commitProtectedObservables(self); 
    }; 
    self.rollback = function() { 
     ko.rollbackProtectedObservables(self); 
    }; 
}; 

$(function() { 
    ko.applyBindings(new ViewModel()); 
}); 

Aby powielić, wykonaj następujące czynności:

  1. Uruchom skrzypce (wartość domyślna dla wyboru jest prawdą)
  2. odznacz pole wyboru
  3. Kliknij przycisk "Zatwierdź"
  4. Należy pamiętać, że wartość teraz pokazuje jako false (to jest prawidłowe zachowanie)
  5. Ponownie uruchom skrzypce (domyślna wartość dla tego pola wyboru jest prawdziwa)
  6. Odznacz pole wyboru, a następnie sprawdzić go natychmiast (przed kliknięciem przycisku „Zatwierdź”)
  7. Kliknij przycisk „Zatwierdź”
  8. Zobaczysz wartość zostanie ustawiona na false/niezaznaczone mimo że była sprawdzana po kliknięciu „Commit ".

„Write” zdarzenie w obliczana zaobserwować wewnątrz protectedObservable definicji robi nie get wystrzelił po raz drugi zmianie pole wyboru, a więc wtedy, gdy wartość jest przyznaniem, to popełnienia niepoprawną wartość.

Należy również zauważyć, że protectedObservable działa idealnie na łańcuchy. Wszelkie wskazówki będą mile widziane. Implementacja

+0

nie mam jeszcze odpowiedniego odpowiedź. Więc po prostu opublikować ten bardzo hacky obejście jako komentarz: http://jsfiddle.net/CyHyW/ – nemesv

+0

Excellent! Dzięki za odpowiedzi! – rhoadsce

+1

Implementacja "protectedObservable" jest bardzo stara. Myślę, że działa tylko ze starszą wersją KO (<2). Dla nowego KO odnieś wzór edytora zaimplementowany przez tego samego autora (Ryan Niemeyer) - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html –

Odpowiedz

Powiązane problemy