2012-07-06 143 views
0

我的問題是爲什麼當我清除它們時,我的兩個數據綁定輸入字段的行爲不同,儘管據我所知它們的設置方式與在knockout中計算的可觀察值相同。敲除可觀察行爲

使用此琴: http://jsfiddle.net/ya7eF/167/

的「分鐘」字段工作正常,「小時」字段是不是。要重現我的問題,請按照以下步驟操作。當我從Duration'hrs'字段中刪除文本時,我想了解爲什麼它不會在模糊上替換爲零,如min字段。

  1. 從第二個持續時間('min')文本字段中刪除文本('30'),然後失去對該字段的焦點。將空字符串替換爲零,並更新其他計算的可觀察對象(結束時間)。如預期的。
  2. 重新運行小提琴。從持續時間 '小時' 文本字段
  3. 刪除文本( '0')
  4. 模糊處理 '小時'
  5. 沒有任何反應;幾小時內計算的observable的'read'方法甚至都不會被調用。我無法弄清楚兩個觀察者之間的區別。

回答

1

在第二種情況下,Duration可觀察值沒有實際變化。當observable的值設置爲當前值時,則不會向用戶發送通知。這意味着您的計算的觀測值的讀取功能不會被觸發。

解決此問題的一種技術是使用可觀察的valueHasMutated函數來確保發送通知。爲避免多次通知,你可以這樣做:

 if (totalMinutes !== self.Duration()) { 
      self.Duration(totalMinutes); 
     } 
     self.Duration.valueHasMutated(); 

這裏是你的樣品更新:http://jsfiddle.net/rniemeyer/ya7eF/168/