Knockout JS -绑定到可观察的int数组
Knockout JS - Binding to array of observable Ints
我试图将一个简单的整数数组绑定到一个具有输入的无序列表,如下所示:
视图模型
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中的更改。
是否有可能使用简单值的数组并实现双向绑定,而不使用更改原始数据模型的解决方案?如果是这样,我做错了什么?
edit:这个问题不同于它被标记为重复的Knockout JS -如何正确绑定一个observableArray,它是关于简单类型元素——int 或字符串的特殊双向绑定情况。
看起来这是一个重复的问题,我的预感是正确的。$data总是会打开可观察对象,所以你必须使用一个名称、值对象对数组来代替。
Knockout JS -如何正确绑定observableArray$data在这种情况下不起作用。相反,您可以像这样创建一个对象数组:
<ul data-bind="foreach: amounts">
<li>
<input type="text" data-bind="value: value" />
</li>
</ul>
<button data-bind="click: checkValues">Check</button>
。.
var MyNumber = function (name, value) {
this.name = ko.observable(name);
this.value = ko.observable(value);
};
var VM = function () {
this.amounts = ko.observableArray();
this.checkValues = function () {
for (var i = 0; i < 5; i++) {
console.log('amount = ' + vm.amounts()[i].value());
}
};
};
var vm = new VM();
vm.amounts().push(new MyNumber('a', 1));
vm.amounts().push(new MyNumber('b', 2));
vm.amounts().push(new MyNumber('c', 3));
vm.amounts().push(new MyNumber('d', 4));
vm.amounts().push(new MyNumber('e', 5));
ko.applyBindings(vm);
相关文章:
- knockoutjs可观察数组
- 按从高到低对多个int变量进行排序
- 多次发射多个可观察器的问题
- 如何在Javascript中读取unsigned int
- 未激发路由的控制器属性上的观察者
- 无法在关闭弹出窗口时传递可观察的数据
- firefox插件:退出不工作的应用程序观察器
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- 如何收集Knockout可观察性以放入JSON
- 在rxjs中巧妙的蒸汽可观察合并
- 从int值来看,Javascript日期不正确
- Knockout observable没有观察到其中一个属性
- JavaScript警报适用于int,但不适用于string
- 将属性设置为未定义时未通知观察者
- 如何从二进制int中获取百分比,每个位表示x%
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 启用具有多个布尔可观察标志的绑定
- Chart.js:将对象而不是int值作为数据传递
- Knockout JS -绑定到可观察的int数组