knockoutjs我可以使用一个组件作为表格行

use*_*251 5 jquery components knockout.js

我想使用一个组件作为表行模板,但似乎无法找到方法,这可能吗?

当我执行以下操作时,它不会将组件放在tbody中,而是将其放在表格上方.

零件

<table>
  <tbody>
     <reportingline params='name: "Phil"'></reportingline>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

模板

<tr>
    <td data-bind="text: col1"></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

Cri*_*ris 7

使用虚拟组件绑定.此方法允许您在没有包装元素的情况下使用组件.

<table>
  <tbody>
    <!-- ko component: { name:"reportingline", params: { name: 'Phil' } } --><!-- /ko -->
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它确实有效. (3认同)

jan*_*oeh 1

恐怕这看起来不可能。来自聚合物常见问题解答

\n\n
\n

在添加 HTML 之前<template>,某些元素(如<select><table>和其他元素)具有特殊的解析器规则,以分别防止除<option>和之外的任何元素<tr>成为其子元素。由于这些遗留规则,不\xe2\x80\x99t 支持的浏览器<template>会将意外元素脱离上下文并使它们成为同级元素 [..]

\n
\n\n

因此,至少在某些现代浏览器 \xe2\x80\x94 中,将自定义元素视为表格行 \xe2\x80\x94 的唯一方法是使用 HTML 标记<template>,而 Knockout 组件不使用该标记。

\n\n

<table>根据WHATWG HTML 标准文档,内部允许的元素是

\n\n
\n

按此顺序:可选地一个caption元素,后跟零个或多个colgroup元素,可选地后跟一个thead元素,后可选地后跟一个tfoot元素,后跟零个或多个tbody元素或一个或多个tr元素,后可选地后跟一个tfoot元素(但只能是tfoot总共是一个子元素),可以选择与一个或多个脚本支持元素混合。

\n
\n\n

“脚本支持元素”<script><template>

\n\n

最好的解决方法可能是创建您自己的自定义<table>标签,并通过display: table. 如果您这样做,请考虑通过 ARIA 角色(例如grid.

\n