"foreach" 绑定
foreach 绑定将array中项目绑定到每个重复的节点中,并且将节点的副本绑定到对应的数组项中。在呈现列表或表格的这尤其有用。
假设你的数组是一个 observable array,每当你添加或删除数组条目时,绑定可以自动更新对应的UI元素 - 插入或删除更多的副本,而不会影响到其他的DOM元素。
当然你也是随意嵌套任何流程控制绑定 foreach, if 和 with。
例子1:遍历数组
这个例子使用 foreach 遍历绑定一个只读表格。
Html代码
<table data-bind="foreach: people">
<tr>
<td data-bind="text: firstName"></td>
<td data-bind="text: lastName"></td>
</tr>
</table>
Js代码
ko.applyBindings({
people: [
{ firstName: 'Bert', lastName: 'Bertington' },
{ firstName: 'Charles', lastName: 'Charlesforth' },
{ firstName: 'Denise', lastName: 'Dentiste' }
]
});
例子2:演示Foreach绑定到监控数组
例子1演示的是绑定的静态数组,如果我们使用ko强大的observable array,就可以实现动态双向绑定:
Html代码
<h4>People</h4> <ul data-bind="foreach: people"> <li> Name: <span data-bind="text: name"> </span> <a href="#" data-bind="click: $parent.removePerson">Remove</a> </li> </ul> <button data-bind="click: addPerson">Add</button>Js代码
function AppViewModel() {
var self = this;
self.people = ko.observableArray([
{ name: 'Bert' },
{ name: 'Charles' },
{ name: 'Denise' }
]);
self.addPerson = function() {
self.people.push({ name: "New at " + new Date() });
};
self.removePerson = function() {
self.people.remove(this);
}
}
ko.applyBindings(new AppViewModel());
例子中使用了$parent关键字,这个涉及到“绑定上下文的概念”,将在下一篇中专门介绍。