2014-09-20 65 views
0

我有下面的js代碼

$(document).ready(function() { 
    var viewModel = { 
     predefinedGrades: [ 
      ko.observable("Excellent"), 
      ko.observable("Good"), 
      ko.observable("OK"), 
      ko.observable("Average"), 
      ko.observable("Bad")], 
     observable: ko.observable("good") 
    }; 
    ko.applyBindings(viewModel); 
}); 

下面是我的看法

<div data-bind="foreach: predefinedGrades"> 
    <input type="text" data-bind="value: $data, valueUpdate: 'keyup'"/> 
</div> 

<input type="text" data-bind="value: observable, valueUpdate: 'keyup'"/> 

的問題是,當我更新的文本輸入foreach綁定,底層數組不會改變。但是,如果我使用綁定observable的最後一個文本輸入來更改文本,則可在keyup事件後更改observable字段。怎麼會這樣?我錯過了什麼?

回答

1

如果您在foreach綁定中使用$rawData而不是$data,它將按預期工作。

From the docs

$ RAWDATA

這是在目前情況下的原始視圖模型的價值。通常這個 將與$ data相同,但是如果提供給Knockout 的視圖模型包含在可觀察元素中,則$ data將是展開視圖模型 ,$ rawData將是observable本身。

+0

請注意,這是在Knockout 3.0中添加的。在以前的版本中,您必須使用其他方法才能訪問基礎observable。 – 2014-09-22 17:55:07

+0

@JeffMercado好點 – 2014-09-23 00:14:02

相關問題