Tengo algunas casillas de verificación vinculado a una matriz en mi modelo. Esto funciona muy bien, cuando se echa un cuadro de la matriz se actualiza en consecuencia.

Sin embargo, cuando el valor ha cambiado deseo de llamar a un método en mi modelo para filtrar los resultados que dan los nuevos valores. He tratado de enlazar el evento de cambio, pero este parece tener los valores antes de que el cambio en lugar de después del cambio.

Me han ilustrado mi problema en un jsfiddle http://jsfiddle.net/LpKSe/ que podría hacer que este tenga más sentido.

Para la integridad de mi código se repite aquí.

JS

function SizeModel() {
    var self = this;
    self.sizes = ko.observableArray(["small", "medium", "large"]);
    self.sizes2 = ko.observableArray(["small", "medium", "large"]);
    self.getResults = function(e) {
        alert(self.sizes());
    };
    self.getResults2 = function(e) {
        alert(self.sizes2());
    };
}

$(document).ready(function() {
    sizeModel = new SizeModel();

    ko.applyBindings(sizeModel);
});​

Html

<h3>Size
  <input type="checkbox" value="small"  data-bind=" checked: sizes, event:{change: getResults}"/>
  <span class='headertext'>Small</span>
  <input type="checkbox"  value="medium" data-bind=" checked: sizes, event:{change: getResults}"   />
  <span class='headertext'>Medium</span>
  <input type="checkbox"  value="large" data-bind=" checked: sizes, event:{change: getResults}"  />
  <span class='headertext'>Large</span>
</h3>
<h3>Size
 <input type="checkbox" value="small"  data-bind=" checked: sizes2, event:{click: getResults2}"/>
 <span class='headertext'>Small</span>
 <input type="checkbox"  value="medium" data-bind=" checked: sizes2, event:{click: getResults2}"   />
 <span class='headertext'>Medium</span>
 <input type="checkbox"  value="large" data-bind=" checked: sizes2, event:{click: getResults2}"  />
 <span class='headertext'>Large</span>
</h3>

OriginalEl autor Mingo | 2012-06-24

2 Comentarios

  1. 14

    Usted no necesita el evento de cambio. Si usted se suscribe a la observableArray usted será notificado cuando se cambia, y se aprobó la actualización de la matriz: http://jsfiddle.net/jearles/LpKSe/53/

    function SizeModel() {
        var self = this;
        self.sizes = ko.observableArray(["3", "2", "1"]);
        self.sizes.subscribe(function(updated) {
            alert(updated);
        });
    }

    OriginalEl autor John Earles

  2. 0

    En su violín faltan comas en su data-bind-s, aquí es un fijo ejemplo: http://jsfiddle.net/4aau4/1/

    Re el problema – que podría ser un KnockoutJS relacionados con el problema (es decir, se actualiza el observableArray después de la change evento es disparado), o algo similar a lo que he pegado en algún tiempo atrás: Casillas se comprueban antes de que haga clic en controlador es llamado

    EDICIÓN:

    Lo difícil domingo, creo que todavía no estoy despierto 🙂

    Echa un vistazo a este fragmento de código: http://jsfiddle.net/4aau4/2/ – parece que DOM se actualiza correctamente y es ko.observableArray que queda atrás. ($('input:checked').length dice cuántas casillas de verificación son realmente comprobado).

    OriginalEl autor Tomasz Zieliński

Dejar respuesta

Please enter your comment!
Please enter your name here