2012-06-29 70 views
4

我處於這種情況,我想覆蓋knockout對可觀察對象的set方法;並給你,爲什麼我要這樣的例子,採取以下示例代碼:覆蓋observable/observableArray集合方法

this.magic = ko.observableArray(); 

// ... inside an Ajax request 
var formatted = reduceAndFormat(respone); 
this.magic(formatted); 

這樣重複幾次,所以不是我想移動reduceAndFormat功能的整個身體在set方法可能定製的可觀察項。

有沒有辦法做到這一點?因爲在訂閱可觀察的更新之外沒有在文檔中看到其他更多內容。

回答

9

您可以創建一個writable computed observable

像這樣的東西可能:

// private variable 
this._magic = ko.observableArray(); 

// property with getter and setter 
this.magic= ko.computed({ 
    read: function(){ 
     return _magic(); 
    }, 
    write: function(value) { 
     var formatted = reduceAndFormat(value); 
     this._magic(formatted); 
    } 
});  
+0

謝謝,完美的作品。 – mhitza

+0

我可以對'this.magic'使用push方法嗎? – Tychio