javascript - knockout 矩阵

标签 javascript data-binding knockout.js nested

我正在尝试使用 knockout 制作矩阵匹配表,但我对当前数据绑定(bind)和父数据绑定(bind)之间的比较感到困惑。

这是jsfiddle.net/wup9rxeu/4/

<script type="text/html" id="cubeheader-template">
<th data-bind="text: $data.Name"></th>
</script>

<script type="text/html" id="body-template">
<!-- ko foreach: $parent.modeldim -->
<td>x</td>
<!-- /ko -->
</script>

我想要完成的是,当基于 modelcubdim 数据为每个 td 填充 x 和 - 时。

我需要一些指针来将 ID 与父 ID 进行比较,如果匹配,则为 X,否则 -

谢谢

最佳答案

您可以使用转换后的数据扩展模型以表示表中的每个单元格。

// just for easy searching items by its ID
data.itemById = function(arr, id){
    return ko.utils.arrayFirst(arr, function(item){
        return item.ID == id;
    });
};

// the property that will hold actual data for *every* table row
// in the format { Name: [Cub Name], Data [array of "x" and "-"] }
data.series = ko.utils.arrayMap(data.modelcub, function(cub){
    var cubdim = data.itemById(data.modelcubdim, cub.ID);
    return {
        Name: cub.Name,
        Data: ko.utils.arrayMap(data.modeldim, function(dim){
            var item = cubdim && data.itemById(cubdim.CubeDimension, dim.ID);
            return item ? "x" : "-";
        })
    };
});

然后稍微更改您的标记:

<tbody data-bind="foreach: series">            
<tr> 
    <th data-bind="text: Name"></th>  
    <!-- ko foreach: Data -->
    <td data-bind="text: $data"></td>
    <!-- /ko -->
</tr>
</tbody>

你会得到它像这样工作:http://jsfiddle.net/wup9rxeu/5/

关于javascript - knockout 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401922/

相关文章:

jquery - 获取关联 ViewModel 的 DOMElement 的简单方法 (KnockoutJS)

javascript - AJAX 成功后更改 Element 的 HTML

c# - XAML 数据绑定(bind)清晰度

wpf - 如何将 XmlDataProvider.Source 绑定(bind)到 MVVM 属性

java - 将 Spinner<Integer> 绑定(bind)到现有 IntegerProperty

knockout.js - Knockout 似乎不喜欢 bind 中的 object.property

javascript - 使用 jquery 测试 knockout javascript 页面

javascript - 当鼠标悬停仍在父级上时,如何使 .hover div 保持打开状态?

JavaScript 拖放照片缩放裁剪器

javascript - Canvas 和颜色交换