不能正确绑定observable的数组
Can not properly bind observableArray of observables
我有下面的代码,它应该绑定observable的observableArray。
<button data-bind="click: loadTag">Upload</button>
<span data-bind="foreach: langs">
<input data-bind="value: $data, valueUpdate: 'afterkeydown'"/>
</span>
<div data-bind = "text: ko.toJS(langs)">
function vm() {
var self = this;
this.langs = ko.observableArray([]);
this.initiate = function(){
self.langs = ko.observableArray([]);
for (var i = 0; i < 4; i++){
self.langs.push(ko.observable('start'));
}
}
this.initiate();
this.loadTag = function(){
for (var i = 0; i < 4; i++){
self.langs()[i](i);
}
}
}
ko.applyBindings(new vm());
JS fiddle可用
正如你在开始看到的,它正确地绑定了,当它加载标签时,绑定也能工作。但问题是,当我修改input中的元素时,绑定不会传播。我想我错过的东西真的很简单,只是找不到什么。
如果你在数组中直接有ko.observable
对象,你需要使用$rawData
而不是$data
来直接绑定到可观察对象本身,而不是它们的值:
<span data-bind="foreach: langs">
<input data-bind="value: $rawData, valueUpdate: 'afterkeydown'"/>
</span>
JSFiddle演示。
来自文档:
$rawData
这是当前上下文中的原始视图模型值。通常这将是相同的
$data
,但如果视图模型提供给Knockout被封装在一个可观察对象中,$data
将是未封装的视图模型,和$rawData
将是可观察对象本身。
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- 推送json以淘汰observable数组
- 剔除observable数组中的observable阵列,添加remove方法
- 在knockout.js中创建observable的动态数组
- 清除observable数组中的observable而不更新
- KnockoutJS+KoGrid-observable数组作为ko的子项.observable(object)不会触发
- 不能正确绑定observable的数组
- 如何将knockout's的Observable数组长度绑定到一个html元素
- 如何在knockoutjs中更新observable数组元素