2013-04-12 46 views
9

我正在使用knockoutjs與受保護的observable和我有複選框的問題。一個受保護的觀察對象的實現可以在here找到,但是我看到有幾個非常相似。如何使用複選框使用knockoutjs保護的observable?

演示我的問題的jsFiddle可以找到here。這是小提琴的一部分。

var ViewModel = function() { 
    var self = this; 

    self.protectedBool = ko.protectedObservable(true); 
    self.commit = function(){ 
     ko.commitProtectedObservables(self); 
    }; 
    self.rollback = function() { 
     ko.rollbackProtectedObservables(self); 
    }; 
}; 

$(function() { 
    ko.applyBindings(new ViewModel()); 
}); 

要複製,請執行下列操作:

  1. 運行小提琴(默認值複選框爲true)
  2. 取消選中該複選框
  3. 點擊 「提交」
  4. 注意該值現在顯示爲假(這是正確的行爲)
  5. 再次運行小提琴(該複選框的默認值爲true)
  6. 取消選中複選框,然後立即檢查其
  7. 點擊「提交」
  8. 你會看到該值將被設置爲即使當你點擊它選中虛假/取消選中(點擊「提交」之前)「提交」。

「寫」事件中觀察到計算的protectedObservable定義中不被解僱你改變複選框,因此當值COMMITED,它犯了不正確的值的第二次。

另請注意,protectedObservable完美適用於字符串。任何指導將不勝感激。

+0

我沒有正確的答案。所以我只是發表這個非常hacky的解決方法作爲評論:http://jsfiddle.net/CyHyW/ – nemesv

+0

優秀!感謝您的迴應! – rhoadsce

+1

'protectedObservable'的實現非常舊。我想它只適用於老版本的KO(<2)。對於新的KO,請參閱由同一作者(Ryan Niemeyer)實施的編輯器模式 - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html –

回答