javascript - CSS 绑定(bind)在 Knockout JS 中不起作用

标签 javascript c# css typescript knockout.js

我是 Knockout JS 的新手,因此需要您的帮助来解决一个小问题。我正在尝试根据条件将 css 样式与 CSHTML 页面中的表行绑定(bind)。我添加了 2 行,但使用“可见”属性为每个元素只显示了一行。以下是我的 cshtml 代码:

<table class="listing">
<tbody class="no-wrap" data-bind="foreach: searchResultsListing.pagedItems, select: searchResultsListing">
<tr class="selectable" data-bind="visible: !$root.isMatchedCase($data), css: { selected: $root.searchResultsListing.isSelected($data) }">
<td class="check"><span></span></td>
--
--
<tr/>
<tr class="selectablematch" data-bind="visible: $root.isMatchedCase($data), css: { selected: $root.searchResultsListing.isSelected($data) }">
<td class="check"><span></span></td>
--
--
<tr/>

底层 Typescript:在 app.listing.ts 文件中:

isSelected(item: T) {
   return this.selectedItems.indexOf(item) >= 0;
}

如您所见,根据 isMatchedCase() 方法(返回 bool 值)的结果,我显示了 tr(可选或可选匹配)之一。问题是 tr 上的 css 仅针对第一个 tr 绑定(bind),即与可选择的类绑定(bind),而不与 selectablematch tr 绑定(bind)。当为 'selectablematch' tr 单击第一个 td 中的复选框时,不会调用方法 'isSelected($data)'。你们能告诉我我在这里缺少什么吗?

最佳答案

我对为什么需要 2 tr 开头有点困惑。你可以做的是有一个 computed ,它会为你返回正确的类,并且只有一行总是可见的。不需要处理隐藏/显示等

Look at this article on the css binding以及它是如何完成的。这是我的建议:

<table class="listing">
  <tbody class="no-wrap" data-bind="foreach: searchResultsListing.pagedItems, select: searchResultsListing">
    <tr data-bind="css: { rowClass($data), selected: $root.searchResultsListing.isSelected($data) }">
      <td class="check"><span></span></td>
    <tr/>
  </tbody>
</table>

还有您的 pureComputed(包装在一个函数中,以便我们可以传递 $data):

var rowClass = function(data) {
  return ko.pureComputed(function(){
    return isMatchedCase(data) ? 'selectablematch' : 'selectable')
  )}
}

我认为这应该能让您朝着正确的方向前进。

关于javascript - CSS 绑定(bind)在 Knockout JS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51870109/

相关文章:

css - 为什么.foo a :link, .foo a :visited {} selector override a:hover, a :active {} selector in CSS?

css - 在 Channel grabber 发票上突出显示多个订单

Javascript 高级闭包

c# - 如何在 Windows 应用程序中将 Dataset 绑定(bind)到 DataGridView

c# - 使用 Cortana 的 QNA 聊天机器人 "say the feedback"

c# - 通过网络将c#字符串发送到c++服务器

javascript - 使用 Horizo​​n.io 重新加载浏览器时清除数据

javascript - 为什么 Firefox 不喜欢 Facebook 登录弹出窗口?

javascript - 了解 Google DataTable 前缀

html - 保持元素始终居中,侧边文本位于左侧