【问题标题】:Aurelia custom element with a table with a slot in itAurelia 自定义元素,其中包含一个带有插槽的表格
【发布时间】:2016-08-03 12:13:53
【问题描述】:

我有一个要呈现表格的 Aurelia 自定义元素。它需要针对 OData 源控制分页等。我希望自定义元素的消费者提供行模板。我的元素的模板如下所示:

<template>
  <div class="odata-table">
    <div class="row">
      <table>
        <thead>
          <tr>
            <th repeat.for="column of columns">
              ${column.title}
            </th>
          </tr>
        </thead>
        <tbody>
          <slot></slot>
        </tbody>
      </table>
    </div>
  </div>
</template>

然后当我食用它时:

<odata-table view-model.ref="resultsTable" url="http://localhost:5000/odata/v1/FooBar">
    <tr repeat.for="record of resultsTable.records" slot="rows">
      <td>${record.Foo}</td>
      <td>${record.Bar}</td>
    </tr>
</odata-table>

这些行永远不会出现在我的身体内。如果我将槽移到表外并用 ul & li 替换 tr & td,它会呈现数据就好了。

我需要做些什么来允许表格元素中的插槽?

【问题讨论】:

  • 你打算用view-model.ref="resultsTable"做什么?您似乎正在尝试“设置”视图模型。
  • view-model.ref 获取对自定义元素视图模型的引用。这允许我调用元素上的方法和访问属性。在这种情况下,我正在迭代它从我的 odata 源中检索到的记录。它还允许我在事后根据用户输入更改页面和配置。如果我将 移到表外并将 ... 更改为
      ...,则此代码完全有效
    • 我没有测试过,但是如果你还没有尝试过,我建议你试试。我在我的博客中写了一些关于其他表格模板模式的内容:davismj.me/blog/advanced-tables

标签: aurelia


【解决方案1】:

这里的问题是浏览器本身,而不是 Aurelia。浏览器出现并看到&lt;slot&gt; 元素并知道它不是&lt;tbody&gt; 的有效子元素,因此将其删除。这就是as-element 属性发挥作用的地方。

但是,在您的特定场景中,as-element 允许您装饰 HTML 元素并让 Aurelia 将其解析为其他内容,但在您尝试使用本质上是内容的 &lt;slot&gt; 元素时可能无法在此处使用投影。

这很可能需要重新设计您的应用程序。考虑使用通过自定义元素传入的可绑定值来动态组合您的标记。

【讨论】:

  • 有没有办法告诉 Aurelia 将元素呈现在不剥离的影子 DOM 中?我尝试了@shadowDom 装饰器,但似乎没有什么不同。
  • 对不起,这真的很糟糕!通过创建模板表来避免重复是对这个特性的一个很好的使用——也许应该有一种方法让slot 作为as-element 或 tbody 上的一些其他自定义属性?
  • 顺便说一句,目前 - 这在 Firefox 中有效,但在 Chrome 中中断
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多