首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Knockoutjs中合并内容相同的表单元格?

问如何在Knockoutjs中合并内容相同的表单元格?
EN

Stack Overflow用户
提问于 2012-01-29 21:19:36
回答 1查看 3.1K关注 0票数 1

我正在尝试用Knockoutjs创建表格。如果某些单元格的属性值相同,我想合并表格单元格。我想不出该怎么做。

我有以下代码

代码语言:javascript
复制
<table id="EventTracker"> <tbody data-bind="template: { name: 'person-template', foreach: Person}"></tbody></table>
<script type="text/html" id="person-template">
    <tr><td data-bind="text: Name"></td><!-- ko template: { name: 'event-template', foreach: event }--> <!-- /ko --> </tr> 
</script>

<script type="text/html" id="event-template">
    <td data-bind="text: Label"></td>
</script>

表创建得很好。但是,如果每个单元格中的内容相同,我不希望显示单个单元格。如果用于创建td的事件与前一个事件相同,我希望将单元格的列跨度增加1。实际上,不是创建单个单元格,而是合并它们。例如,如果我有3个具有相同文本的单元格,它们应该合并并创建一个colspan为3的td。我不知道如何在Knockoutjs中编码。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 03:00:36

与其使模板复杂化,不如在视图模型中构建事件数据的映射版本,这将使绑定变得更容易。

person对象上的计算可观察对象可能如下所示:

代码语言:javascript
复制
this.eventCells = ko.computed(function() {
    var current,
        result = [];

    ko.utils.arrayForEach(this.events(), function(event) {
        if (current && current.label() !== event.label()) {
            current = null;
        } 

        if (!current) {
            current = { label: event.label, count: 0 };   
            result.push(current);
        }

        current.count++;      
    });

    return result;   
}, this);

现在,您可以通过eventCells访问,然后像这样绑定:

代码语言:javascript
复制
data-bind="text: label, attr: { colspan: count }"

下面是一个示例:http://jsfiddle.net/rniemeyer/3g8jw/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9053467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档