knockout.js - 使用 knockout 确定 foreach 中的第一个元素

标签 knockout.js

在 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/

相关文章:

mvvm - 编码的UI搜索不允许DataService Ajax请求

javascript - 跟踪 Knockout.js 订阅者

knockout.js - 检查knockoutjs是否加载

knockout.js - 如何在 Knockout 中创建计算可观察数组

knockout.js - 使用 knockout 数据绑定(bind)渲染模板后,如何均衡一组 DOM 元素高度?

node.js - 是否有专门为 Node.js 开发实践构建的客户端框架?

javascript - Knockout.js 多选和分隔字符串之间的双向绑定(bind)

asp.net-mvc-3 - 如何在 MVC 3 Razor 中使用 knockout.js?

knockout.js - 在 knockout 验证中清除错误

javascript - 循环遍历具有可观察属性的 JS 对象