2012-03-03 16 views
16

estoy encontrando este un lugar extraño estar en un poco de una pérdida, pero si no puede hacer esto:¿Cómo se incrementa un knockout.js observable?

koObserv(koObserv() + 1); 

y no se proporciona un método, ¿estoy obligado a hacer:

koObserv = ko.observable(koObserv() + 1) 

Esto parece muy torpe ... ¿hay alguna otra forma en la que me estoy perdiendo?

+2

Puede hacer 'koObserv (koObserv() + 1);'. ¿Puedes compartir tu código donde esto no está funcionando? El único lugar donde esto puede causar problemas es si se encuentra en una observación computable donde puede causar una reevaluación recursiva. –

Respuesta

3

Le sugiero que, si usa muchos incrementos, cree alguna función auxiliar para hacer el incremento y pasarle la referencia de su observable. Terminas con un código más legible.

JS:

var increment = function (observable) { 
    observable(observable() + 1); 
}; 

var MyViewModel = function() { 
    this.num1 = ko.observable(0); 

    this.incrementNum = function (observable) { 
     // passing the observable by reference to the helper function 
     increment(observable); 
    } 
} 

HTML:

<button data-bind="click: incrementNum.bind($root, num1)"> 

JSFiddle example

+1

También puede agregar una función al ['ko.observable.fn'] (http://knockoutjs.com/documentation/fn.html) –

6

que podría abstracta éstos lógica en un extenderá observables

ko.observable.fn.increment = function (value) { 
    this(this() + (value || 1)); 
}; 

var counter = ko.observable(0); 
console.log(counter()); // 0 

counter.increment(); 
console.log(counter()); // 1 

counter.increment(); 
console.log(counter()); // 2 

counter.increment(5); 
console.log(counter()); // 7 
Cuestiones relacionadas