Reactable 包提供了许多如何使用它的示例,包括自定义动作 https://glin.github.io/reactable/articles/examples.html#custom-action在每一行中。该示例有一个“详细信息”列,它显示看起来像按钮的元素。通过 Javascript 函数,它可以识别详细信息列上的点击并采取相应的操作。
将其作为附加参数添加到reactable
打电话进来renderReactable
.
reactable(
data = data,
height = 600,
defaultPageSize = 20,
...
onClick = JS("function(rowInfo, colInfo) {
// Only handle click events on the 'details' column
if (colInfo.id !== 'details') {
return
}
// Send the click event to Shiny
if (window.Shiny) {
Shiny.setInputValue('foo', 'bar')
}
}")
)
Shiny.setInputValue("foo", "bar")
将导致服务器的输入 $foo 设置为“bar”。这会导致一个闪亮的事件,您可以在服务器中捕获该事件,例如使用观察者。看有关 R 中 Javascript 的教程以了解详细信息 https://shiny.rstudio.com/articles/js-send-message.html.
请注意:reactable 的作者不建议使用它,因为“键盘用户目前无法访问自定义点击操作”(引自手册 2021-10-16)。如果可访问性或使用键盘的其他原因与您无关,您可以使用此解决方案。
关于“类”解决方案的注意事项:我不建议使用class = "action-button"
因为我相信它是一个脆弱的结构。这不是创建输入绑定的正确方法,我很惊讶它竟然能起作用。
据我所知,唯一正式支持表行中按钮的软件包是数据表 https://datatables.net/与按钮扩展 https://datatables.net/extensions/buttons/.