如何将输入绑定到observableArray中的observable?

时间:2017-05-23 19:32:18

标签: javascript knockout.js

我有一个对象(可观察)并且它有键,每个键都是可观察的。其中一个键是包含其他可观察对象的数组。

我希望能够使用HTML输入字段修改这些值。我想到的是简单地通过可观察数组进行操作,并对输入进行值/ textInput绑定以修改它们。

但是,在修改文本输入时 - 原始值不会改变!难道我做错了什么?为什么绑定值不会按照我期望的方式更新?

我已经将我正在做的事情分解为更通用的版本:http://jsfiddle.net/veqr2q6q/

<div class='liveExample'>   
    <div class="line-container" data-bind="foreach: {data: text, as: 'line'}">
        <input type="text" data-bind="textInput: line" /><br />
    </div>
    <h2>Hello,</h2>
    <ul data-bind='foreach: {data: text, as: "line"}'>
        <li data-bind="text: line"></li>
    </ul>
</div>
// Here's my data model
var ViewModel = function(first, last) {
    this.text = ko.observableArray([
        ko.observable(first),
        ko.observable(last)
    ])
};

ko.applyBindings(new ViewModel("Planet", "Earth")); // This makes Knockout get to work

1 个答案:

答案 0 :(得分:3)

我认为在这种情况下你想使用$rawData。我在这里更新你的小提琴。

http://jsfiddle.net/veqr2q6q/2/

<div class='liveExample'>   
    <div class="line-container" data-bind="foreach: text">
        <input type="text" data-bind="textInput: $rawData" /><br />
    </div>
    <h2>Hello,</h2>
    <ul data-bind='foreach: {data: text, as: "line"}'>
        <li data-bind="text: line"></li>
    </ul>
</div>

Knockout JS docs

中引用
  

通常[$rawData]与$data相同,但如果提供给Knockout的视图模型包含在一个observable中,$data将是展开的视图模型,{ {1}}将是可观察的本身。