2012-11-05 16 views
3

背景恢復knockoutjs:如何從或陷阱丟失ko.observable()或ko.computed()

特雷弗有三分之一的聲明KO簡單knockoutjs頁面中聲明ko.observable()和。 ()計算

問題

特雷弗想刪除第三申報項目。問題是,當特雷弗刪除它,所有的後續宣佈的項目渲染失敗也是如此。

考慮下面的代碼片段:

<p>r1c1: <input data-bind="value: r1c1, valueUpdate:'afterkeydown'" /></p> 
<p>r1c2: <input data-bind="value: r1c2, valueUpdate:'afterkeydown'" /></p> 
<p>r1c3: <input data-bind="value: r1c3, valueUpdate:'afterkeydown'" /></p> 
<p>r1c4: <input data-bind="value: r1c4, valueUpdate:'afterkeydown'" /></p> 

<script type="text/javascript"> 
    var ViewModel = function(){ 
    var self = this; 

    self.r1c1 = ko.observable('alpha'); 
    self.r1c2 = ko.observable('bravo'); 
    self.r1c4 = ko.observable('delta'); 

    // if Trevor comments out this line, it caues r1c4 to stop rendering 
    // this is expected, but is there a workaround that does not require to 
    // remove the data-binding to value r1c3 from the HTML body ? 
    self.r1c3 = ko.computed(function(){return [self.r1c1(),self.r1c2()].join(':')}); 
    } 

    ko.applyBindings(new ViewModel()); 
</script> 

問題

有沒有一種方式,可以特雷弗註釋掉爲R1C3的ko.computed()聲明及仍然將數據綁定留在頁面主體中的r1c3;沒有它打破後續數據綁定到r1c4?特雷弗可以使用

回答

3

一個竅門是引用該變量在結合作爲$data.r1c3而不僅僅是r1c3。引用對象的未定義的屬性不會導致這樣的錯誤會引用未定義的變量。

所以,特雷弗希望讓他的HTML看起來像:

<p>r1c3: <input data-bind="value: $data.r1c3, valueUpdate:'afterkeydown'" /></p> 
+0

由於RP,這非常有意義。 – dreftymac