2015-01-06 13 views
6

KnockoutJS観測値を高い表現力でインクリメントするコンパクトな方法があるので、コードが読みやすくなりますか?良い表現方法でKnockoutJSを観測可能にする

私はこの構文を避けたい:

var counter = ko.observable(0); 

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

代わりに私のような、より表現の構文たいと思います:APIのこの種もの値を定義するための引数を受け入れる必要があり

counter.increment(); 

をインクリメント:

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

私は公式のドキュメンテーションでこれが見つかりませんでした他の類似の質問は、私の意見では読みにくい標準的な構文を報告しています。

答えて

7

個々の観測対象を拡張して、すべての観測対象に増分または適用することができます。

// 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

ありがとうございました。あなたの例とエクステンダ上のいくつかの読書に基づいて私は "有効"プロパティを設定オブジェクトに変更することができると信じていますので、デフォルトのインクリメントステップをこのように設定することができます: 'var counter = ko.observable(0).extend({ :10}); ' – marcopeg

+0

間違いなく。私はあなたがそれを構成可能にしたいと思っていたかどうか確信が持てませんでしたが、あなたは確かにそれをもっと多くすることができます。 –

関連する問題