2013-04-12 9 views
9

Sto usando knockoutjs con osservabili protetti e sto avendo un problema con le checkbox. Un'implementazione di osservabili protetti può essere trovata here ma ce ne sono diversi che ho visto che sono molto simili.Come utilizzare un osservabile protetto con knockoutjs con caselle di controllo?

Un jsFiddle che dimostra il mio problema può essere trovato here. Ecco una parte del violino.

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()); 
}); 

Per duplicare, effettuare le seguenti operazioni:

  1. Eseguire il violino (valore predefinito per la casella di controllo è vero)
  2. deselezionare la casella
  3. Fare clic su "Commit"
  4. Si noti che il valore ora è falso (questo è il comportamento corretto)
  5. Esegui nuovamente il violino (il valore predefinito per la casella di spunta è true)
  6. deselezionare la casella quindi controllare immediatamente (prima di cliccare su "Commit")
  7. Fare clic su "Commit"
  8. vedrete il valore verrà impostato su false/incontrollato anche se è stato verificato quando si fa clic su "Commit ".

L'evento "scrivere" in osservabile calcolata all'interno della definizione protectedObservable fa non licenziato la seconda volta che si modifica la casella di controllo e, quindi, quando il valore si impegna, è commettere il valore errato.

Si noti inoltre che protectedObservable funziona perfettamente per le stringhe. Qualsiasi suggerimento sarebbe davvero apprezzato.

+0

Non ho ancora una risposta adeguata. Quindi ho appena postato questo workaround molto hacky come commento: http://jsfiddle.net/CyHyW/ – nemesv

+0

Eccellente! Grazie per la risposta! – rhoadsce

+1

L'implementazione di 'protectedObservable' è molto vecchia. Immagino che funzioni solo con la versione precedente di KO (<2). Per il nuovo KO, fai riferimento allo schema editoriale implementato dallo stesso autore (Ryan Niemeyer) - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html –

risposta

Problemi correlati