【问题标题】:How do I bind inputs to observables in an observableArray?如何将输入绑定到 observableArray 中的可观察对象?
【发布时间】:2017-05-23 19:32:17
【问题描述】:

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

我希望能够使用 HTML 输入字段修改这些值。我想到要做的是简单地遍历可观察数组,并对输入进行 value/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

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    我认为在这种情况下你想使用$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 的视图模型包装在可观察对象中,$data 将是未包装的视图模型,$rawData 将是可观察对象自己。

    【讨论】:

    • 太棒了,谢谢!我对 KO 的了解是临时性的,所以直到本周我才知道 $rawData 甚至 textInput
    猜你喜欢
    • 2015-03-05
    • 2017-09-05
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多