Knockoutjs:foreach绑定中的$ data不更新底层元素

时间:2014-09-20 04:31:05

标签: javascript knockout.js

我有以下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 个答案:

答案 0 :(得分:1)

如果您在$rawData绑定中使用$data而不是foreach,它将按预期工作。

From the docs

  

$ RAWDATA

     

这是当前上下文中的原始视图模型值。通常这个   将与$ data相同,但如果视图模型提供给Knockout   包含在一个可观察的数据中,$ data将是未包装的视图模型,   和$ rawData本身就是可观察的。