【发布时间】:2013-09-20 19:09:14
【问题描述】:
我正在尝试将一个简单的 整数 数组绑定到带有输入的无序列表,如下所示:
视图模型
self.amounts = ko.observableArray();
for (var i=0; i<5; i++){
self.amounts.push(ko.observable(i));
}
HTML
<ul data-bind="foreach: amounts">
<li><input type="text" data-bind="value: $data"/></li>
</ul>
这将生成列表,其中输入正确填写了数字 0-4。但是,当我更改任何输入的值时,ViewModel 不会获得新值。
如果我使用一个简单对象的数组作为 observableArray,像这样:
[{amt: 0}, {amt: 1}, {amt: 2}]
并调整 HTML 以将输入绑定到“amt”属性,然后更改输入中的值会触发 ViewModel 中的更改。
是否可以使用简单值数组并实现双向绑定,而无需使用更改原始数据模型的解决方法?如果是这样,我做错了什么?
编辑:这个问题与被标记为重复的问题不同Knockout JS - How to correctly bind an observableArray, 这是关于简单类型元素的特殊双向绑定案例 - ints 或 strings。
【问题讨论】:
-
您是否尝试过使用 ints 的 observableArray 而不是 observable(int) 即:
self.amounts.push(i)?我并不积极,但我相信这应该会奏效。 -
我确实尝试过,但没有运气。还尝试制作整数字符串,但也没有用。
-
值绑定需要传递一个包装好的 observable。我不确定 $data 究竟是如何工作的,但它可能会提前解开 observable...