Knockout2.x开发 第七章:控制流Control Flow:foreach绑定、虚拟结点绑定
2013-04-06 17:17 阅读(173)

"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关键字,这个涉及到“绑定上下文的概念”,将在下一篇中专门介绍。