![](/img/trans.png)
[英]Knockout.js Binding of select options and value inside a foreach binding
[英]Knockout foreach binding, update value
我有ko模型:
var Model = function(notes) {
this.note = ko.observableArray(notes);
};
var model = new Model([{"post":"a"},{"post":"b"}]);
ko.applyBindings(model);
和html div:
<div data-bind='foreach: note'>
<p><span data-bind='text: post'>
<p><input data-bind='value: post'>
</div>
小提琴在这里: http : //jsfiddle.net/DE9bE/
我想在输入中输入新文本时更改跨度值,例如在小提琴中输入 : http : //jsfiddle.net/paulprogrammer/vwhqU/2/但它没有更新。 我如何在foreach绑定中做到这一点?
对象的属性需要制成可观察的 。
您可以自己手动执行此操作(我在这里使用了普通的js数组map
方法,如果需要IE8支持,则可以出于相同目的使用ko.utils.arrayMap
):
var Model = function(notes) {
this.note = ko.observableArray(notes.map(function(note){
note.post = ko.observable(note.post);
return note;
}));
};
var model = new Model([{"post":"a"},{"post":"b"}]);
ko.applyBindings(model);
或者,您可以使用映射插件 (需要包括单独的js文件)为您执行此操作(递归)。
var Model = function(notes) {
this.note = ko.mapping.fromJS(notes);
};
var model = new Model([{"post":"a"},{"post":"b"}]);
ko.applyBindings(model);
如果您从服务器获取整个数据对象,则也可以直接将其输入:
var model = ko.mapping.fromJS({
note: [{"post":"a"},{"post":"b"}]
});
ko.applyBindings(model);
尝试这个:
<div data-bind='foreach: note'>
<p><span data-bind='text: post'></span></p>
<p><input data-bind='value: post'/></p>
</div>
var Model = function (notes) {
this.note = ko.observableArray(notes);
};
var Post = function (data) {
this.post = ko.observable(data);
};
var model = new Model([new Post("a"), new Post("a")]);
ko.applyBindings(model);
您想要的是带有可观察变量的可观察数组,否则您将不会更新跨度,因为您正在更改不可观察变量,请参阅此文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.