敲除HTML表格问题

时间:2014-06-19 19:29:33

标签: javascript jquery html knockout.js

基本上,我有一个显示多个表的页面,所有表都由knockout填充。现在,某些行将显示在此网格中,除非它们填充了数据(特殊条件行)。我有一个KO订阅的observable,它观察行中是否有数据。 在这个订阅内部是一个基本上说:

的函数
self.requestSubscription = self.hasRequest.subscribe(function (newValue) {
        if (newValue) {
            $("[rowId = '6']").show(); // this 6 is hardcoded
        }
        else {
            $("[rowId = '6']").hide();
        }
    });
问题是,这个函数遍历页面上的每个网格(因为我忘记了jquery如何工作)并在每个网格中隐藏该行。如何减少这个以隐藏当前网格中的增长?问题是我无法将ID硬编码到网格中,因为我不知道页面加载会显示多少网格。有任何想法吗?谢谢!

这是一些html减去不必要的内容。这是网格本身的标记。问题是,当我用Id" 6"隐藏tr时使用上面的jquery,它在页面上的每个网格中都是这样做的。

<table>
    <tbody>
         <!-- ko foreach: rows() -->
         <tr data-bind="css: { 'request': id() === 6, 'conflict': id() === 8}, attr: { rowId: id() }">
              <td class="title-cell">
                    <span data-bind="text: title(), attr: { TypeId: id() }">Booking Type</span>
              </td>
         </tr>
     </tbody>
</table>

1 个答案:

答案 0 :(得分:2)

您应该利用Knockout的visible绑定,而不是使用jQuery显示和隐藏行。像这样:

<tr data-bind="visible: myTableModel.hasSpecialCondition">
    <td>Whatever</td>
</tr>

这样显示逻辑就连接到数据而不是DOM。

此处的文档:http://knockoutjs.com/documentation/visible-binding.html