【问题标题】:Updating properties of an item within an observable array in Knockout在 Knockout 中更新可观察数组中项目的属性
【发布时间】:2013-12-17 22:52:28
【问题描述】:

我正在尝试在 Knockout 中实现可观察数组的可更新“选定项”,以便选定项属性的更改传播回列表。

在下面的示例中,我的模型包含一个可观察数组中的用户列表,每个用户都有一个可观察的“名称”属性。该模型还有一个selectedUser 属性,它引用列表中的用户。

我有一个输入控件绑定到所选用户的name() 值。我希望能够更改输入中的名称,并看到更改传播到下面的列表。

JS:

var UserModel = function() {
    this.users = ko.observableArray([
                {id:1, name:ko.observable('Bob')},
                {id:2, name:ko.observable('Jane')}
            ]);
    this.selectedUser = ko.observable(this.users()[0]);
    console.log(this.users()[0].name());
}
ko.applyBindings(UserModel);

HTML:

<input type="text" data-bind="value: selectedUser().name()" value="">
<table data-bind="foreach: users()">
    <tr >
        <td data-bind="text: $data.name()"> </td>
    </tr>
</table>

小提琴: http://jsfiddle.net/5t5k2/5/

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    几乎在那里。

    唯一的问题是您将输入字段绑定到可观察对象的调用,而不是函数本身。

    当您执行.name() 时,您正在调用可观察对象,因此您会得到一个字符串。相反,绑定到 observable 本身。

    变化:

    <input type="text" data-bind="value: selectedUser().name()" value="">
    

    <input type="text" data-bind="value: selectedUser().name" value="">
    

    (fiddle)

    如果你想要那种直接的感觉,你可以告诉它在按下键时更新,而不仅仅是在更改事件(在选项卡上或当你失去焦点时触发)

    <input type="text" data-bind="value: selectedUser().name, valueUpdate: 'keyup'" value="">
    

    (fiddle)

    【讨论】:

    • 任何时候 :) 我认为绑定到 observable 的结果而不是 observable 本身也让我好几次。
    猜你喜欢
    • 2016-10-08
    • 2014-01-28
    • 2014-01-22
    • 1970-01-01
    • 2019-06-02
    • 2020-05-04
    • 1970-01-01
    • 2013-12-16
    • 2015-11-30
    相关资源
    最近更新 更多