2015-01-06 26 views
6

是否有一種緊湊的方式以高表達方式增加KnockoutJS可觀察性,以便代碼獲得可讀性?以良好的表現方式增加KnockoutJS可觀察性

我想避免的語法如下:

var counter = ko.observable(0); 

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

相反,我想一個更富有表現力的語法,如:

counter.increment(); 

這種API也應該接受一個參數來定義的值增量:

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

我在官方文檔中沒有找到類似的東西tation和其他類似的問題在這裏報告的只是我認爲非常難以閱讀的標準語法。

回答

7

您可以擴展單個observable以支持遞增或將其應用於所有observable。

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

謝謝。基於你的例子和一些關於擴展的讀物,我相信我可以將「enabled」屬性改爲一個配置對象,這樣我就可以像下面這樣設置默認增量步驟:var counter = ko.observable(0).extend({incrementable :10});' – marcopeg

+0

當然。我不確定你是否想要它可配置,但你肯定可以做更多的事情。 –