5

(请注意,您不需要了解此数据表的相关信息..)

我正在创建一个指令来处理DataTables。我想做的是有一个带有两个图标的操作列 - 编辑和删除。这些图标应该响应 ng-click。

数据表允许您通过为给定的列定义 ( mRender )提供回调来做到这一点。此回调为该单元格值返回一个html 字符串,该字符串插入到 DOM 中,而不是实际的单元格值。

结帐这个plunker。突出显示了两个重要功能:

  • renderActionIcon- 我上面提到的回调的实现。它会在单元格中生成我想要的 HTML 字符串。
  • registerNewHtmlWithAngular- 我表面上让 Angular 知道我需要为该列注册的 ng-click 的功能。

应该进去什么registerNewHtmlWithAngular

如果 $compile html,angular 添加适当的单击事件侦听器并返回一个元素,但由于 Datatables 函数需要 HTML,那些注册的元素将不会添加到 DOM。

有任何想法吗?谢谢各位!

4

2 回答 2

10

敲了一天的键盘后:

似乎没有办法将 $compile 成html并让它在 DOM 中可用。它必须是插入到 DOM 中的元素,这样事件侦听器才不会丢失。

我在这个特定场景中解决问题的方法是插入 HTML,然后在新的 HTML 上运行 $compile。

Datatables 通过fnCreatedRow回调使这件事变得简单,在呈现一行后,它会传回一行的元素,让你可以用它做任何你想做的事情。在这种情况下,我对该行运行 $compile 并将其返回给 Datatables。请参阅rowCompiler更新后的plunker中的功能。

于 2013-02-07T15:25:34.423 回答
0

因为 datatables 使用 innerHTML = mRender(...) 来插入一个 html (所以它无论如何都会将任何内容转换为字符串,并且您将丢失 $compile 函数的结果。我想没有黑客可以使用 mRender 来做到这一点 - 因为例如,可以稍微更改数据表,因此它将使用 $.append 而不是 innerHTML。但这不是一个好习惯,因此在我们的项目中,我们使用通常的 jquery 绑定而不是 ng-click。

于 2013-02-07T05:39:49.207 回答