javascript - Knockout.js - 动态列,但每行最多 5 个

标签 javascript knockout.js

我在这里找到了一个类似的问题/答案:How to render a table with some fixed and some dynamic columns

但是并没有完全解决我的问题。我试图弄清楚如何将动态列的数量限制为每行 5 个,如果 View 模型中的项目超过 5 个,则创建一个新行并重复数组中所有 5 个组。

例如:

var vm = {
    item: { name: 'test1' },
    item: { name: 'test2' },
    item: { name: 'test3' },
    item: { name: 'test4' },
    item: { name: 'test5' },
    item: { name: 'test6' }
};

给那个模型,我怎么得到这个表?

<table>
   <tr>
      <td>test1</td>
      <td>test2</td>
      <td>test3</td>
      <td>test4</td>
      <td>test5</td>
   </tr>
   <tr>
      <td>test6</td>
   <tr>
</table>

最佳答案

要处理这种情况,我可能会将逻辑插入您的 View 模型中,以便您的 View 可以保持简单。所以这个想法是使用 dependentObservable 来代表你的“行”。然后,您的 View 可以只 foreach 遍历行,然后 foreach 遍历行中的单元格。

这是一个示例,它使该列数成为可观察的,以便它可以动态更新。 http://jsfiddle.net/rniemeyer/9TN9W/

var viewModel = {
    items: ko.observableArray(),
    columnLength: ko.observable(5)  
};

//sample data
for (var i = 0; i < 100; i++) {
    viewModel.items.push({ name: 'test' + i });  
}

//return an array of rows.  Each row is an array of items
viewModel.rows = ko.dependentObservable(function() {
    var result = [],
        colLength = parseInt(this.columnLength(), 10),
        row;


    //loop through items and push each item to a row array that gets pushed to the final result
    for (var i = 0, j = this.items().length; i < j; i++) {
        if (i % colLength === 0) {
            if (row) {
              result.push(row);     
            }
            row = [];
        }
        row.push(this.items()[i]);
    }

    //push the final row  
    if (row) {
        result.push(row);
    }

    return result;
}, viewModel);

关于javascript - Knockout.js - 动态列,但每行最多 5 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669946/

相关文章:

javascript - CommonJS 中的自定义 `require` 方法(特别是 Node)

javascript - knockoutJS 中的验证码不起作用

jquery - 将 knockoutjs 与 jqGrid 一起使用

php - 防止 Firefox 篡改数据

javascript - Knockout.js 模型更新时 Moment.js 损坏

html - knockoutjs 获取满足条件的项目数

javascript:durandaljs,在 View 模型中应用绑定(bind)

javascript - 在编写巨大的 if 语句时有什么方法可以节省空间吗?

javascript - 使用对象与原始值作为函数参数时内存使用的差异

javascript - 我不知道如何修复此代码