淘汰赛将行添加到创建列的 foreach 循环中

Posted

技术标签:

【中文标题】淘汰赛将行添加到创建列的 foreach 循环中【英文标题】:Knockout adding rows into a foreach loop that creates columns 【发布时间】:2019-03-09 21:01:31 【问题描述】:

我曾经有一个看起来像这样的视图:

<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
    <h4 class="text-center">Row 1, Col 1</h4>
</div>
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
    <h4 class="text-center">Row 1, Col 2</h4>
</div>
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
    <h4 class="text-center">Row 1, Col 3</h4>
</div>
<div class="row">
//Repeat...

基本上 4 行,每行 3 列,使用 Bootstrap 设置。 我现在已经将columns 的代码移到了淘汰模板中,并使用 foreach 循环添加它们:

<div data-bind="foreach: myArray">
    <my-widget params="value: $data"></my-widget>
</div>

这很好用,但缺少一件事,row。如何每 3 个 columns 添加一个 div row

【问题讨论】:

【参考方案1】:

您是说my-widget 组件仅包含 3 列,而您希望 div row 包含这 3 列?

看起来这应该就像将div row 添加到 Knockout 模板的顶部一样简单,如下所示:

<div class='row'>
    <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
        <h4 class="text-center">Row 1, Col 1</h4>
    </div>
    <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
        <h4 class="text-center">Row 1, Col 2</h4>
    </div>
    <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
        <h4 class="text-center">Row 1, Col 3</h4>
    </div>
</div>

如果这不可行,您也可以这样做:

<div data-bind="foreach: myArray">
    <div class="row">
        <my-widget params="value: $data"></my-widget>
    </div>
</div>

如果这些都不正确,那么我建议您向我们展示模板,以及相关的 viewModel 代码。

【讨论】:

【参考方案2】:

从 foreach 内部的绑定上下文访问 $index https://knockoutjs.com/documentation/binding-context.html

<div data-bind="foreach: myArray">
    <!-- ko if: $index() !== 0 && $index() % 3 === 0 -->
    <div class="row">
    <!-- /ko -->
    <my-widget params="value: $data"></my-widget>
</div>

【讨论】:

以上是关于淘汰赛将行添加到创建列的 foreach 循环中的主要内容,如果未能解决你的问题,请参考以下文章

将行添加到带有列的空数据框

使用 foreach 循环添加每列的总和并在表格底部显示每个总计

将行添加到 SQL 查询结果,其中包含某些列的总数

如何在不添加更多 html 的情况下单独切换淘汰赛 foreach div?

淘汰赛 JS 选择初始值在 foreach 循环内未正确显示

淘汰赛无法处理“foreach”的绑定