2015-01-06 5 views
6

Gibt es eine kompakte Möglichkeit, ein KnockoutJS beobachtbar hoch ausdrucksvoll zu erhöhen, so dass der Code an Lesbarkeit gewinnt?Inkrementiere einen KnockoutJS beobachtbar auf eine gute expressive Art und Weise

Ich mag diese Syntax vermeiden:

var counter = ko.observable(0); 

// increment the counter as we know today 
counter(counter() + 1); 

Stattdessen würde ich eine ausdruck Syntax mag wie:

counter.increment(); 

Diese Art von API auch ein Argument akzeptieren soll den Wert zu definieren, das Inkrement:

counter.increment(10); 
counter.increment(-1); 

Ich habe nichts dergleichen im offiziellen Dokument gefunden Fragen und andere ähnliche Fragen geben hier nur die Standard-Syntax wieder, die meiner Meinung nach extrem schwer zu lesen ist.

Antwort

7

Sie könnten entweder die einzelnen Observablen erweitern, um die Inkrementierung zu unterstützen, oder sie auf alle Observablen anwenden.

// for individual 
ko.extenders['incrementable'] = function (target, enabled) { 
    if (enabled) { 
     target.increment = function (incValue) { 
      this(this() + (incValue || 1)); 
     }.bind(target); 
    } 
    return target; 
}; 
var counter = ko.observable(0).extend({ incrementable: true }); 
counter.increment(); 

// or for all 
ko.observable.fn.increment = function (incValue) { 
    this(this() + (incValue || 1)); 
}; 
+0

danke. Ich glaube, dass ich die Eigenschaft "enabled" als Konfigurationsobjekt ändern kann, so dass ich den Standardinkrementierungsschritt wie folgt festlegen kann: 'var counter = ko.observable (0) .extend ({incrementable : 10}); ' – marcopeg

+0

Definitiv. Ich war mir nicht sicher, ob Sie es konfigurierbar haben wollten, aber Sie können definitiv viel mehr damit machen. –