在 knockout 模板绑定(bind)过程中,我需要检测何时处理每一行中的第一个元素,因为它周围不应有 anchor 标记。
给定以下用于 knockout 的js......
function Model() {
var self = this;
self.gridData = ko.observableArray('{"GridData":[["Category foo","0","0"],["Category bar","0","0"]]}');
}
var model = new Model();
ko.applyBindings(model);
还有这个模板...
<script type="text/html" id="template">
<table>
<tbody data-bind="foreach: gridData">
<tr data-bind="foreach: $data">
<td><a href="" data-bind="text: $data"></a></td>
</tr>
</tbody>
</table>
</script>
和这个 html...
<div data-bind="template: { name: 'template' }"></div>
如果我们正在处理第一个元素,是否可以以某种方式使用“if”绑定(bind)?
此外,我发现了这个 SO Post , 但它并不能完全满足我的需求。
更新:
感谢您的回答。使用每个中提供的信息,我能够找到适合我的情况的良好解决方案。我将模板更新为以下...
<script type="text/html" id="template">
<tbody data-bind="foreach: gridData">
<tr data-bind="foreach: $data">
<!-- ko if:($index()===0) -->
<td data-bind="text: $data"></td>
<!-- /ko -->
<!-- ko ifnot:($index()===0) -->
<td><a href="" data-bind="text: $data"></a></td>
<!-- /ko -->
</tr>
</tbody>
</script>
最佳答案
您可以简单地使用 $index
绑定(bind)上下文,它是一个可观察对象,因此您需要调用它来获取它的值。
JS
var vm = {
items: ['a', 'b', 'c', 'd', 'e', 'f']
};
ko.applyBindings(vm);
HTML
<div data-bind="foreach: items">
<div data-bind="css: { first: $index() == 0 }">
<span data-bind="text: $index"></span>
:
<span data-bind="text: $data"></span>
</div>
</div>
fiddle :http://jsfiddle.net/xixonia/v8Eh2/
Foreach 文档:http://knockoutjs.com/documentation/foreach-binding.html
绑定(bind)上下文文档:http://knockoutjs.com/documentation/binding-context.html
关于knockout.js - 使用 knockout 确定 foreach 中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042972/