2012-12-27 153 views
0

在knockoutjs訂閱方法中,我還設置了subscribe方法內的屬性值,爲什麼該方法被調用了2次,第一次在UI中更改值,第二次時值是改變了訂閱方法。knockoutjs訂閱方法被調用2次

任何人都知道如何避免這種情況。

這是我的示例代碼:

var ViewModel = function(first) { 
    var self = this; 
    self.firstName = ko.observable(first); 
    self.firstName.subscribe(function(newValue) { 
     alert(newValue); 
     self.firstName(newValue.toUpperCase());  
    }); 

}; 

而且投入的jsfiddle http://jsfiddle.net/ndkhoiits/4ABuq/

回答

3

在你的情況,你可能會需要一個計算觀察到的一個getter和setter

var ViewModel = function(first) { 
    var self = this; 
    self.firstName = ko.observable(first); 
    self.firstNameForView = ko.computed({   
     read: function() {    
      return self.firstName(); 
     },   
     write: function (value) {    
      self.firstName(value.toUpperCase()); 
     },   
     owner: this  
    }); 
}; 

現在在數據綁定中使用firstNameForView。

+0

感謝Ryadavilli,它現在運作良好:) –