问题
Custom widget HTML上的htmlwidgets.org页面的最后一部分说,您可以通过创建名为<widget_name>_html
如何将变量传递给此函数?
示例
我创建了一个名为 myWidgetHTML 的新包,并运行htmlwidgets::scaffoldWidget(name = "myHTML”)
。该软件包托管在我的github page
在生成的R/myHTML.R
文件中,我创建了函数
#' @import htmltools
myHTML_html <- function(id, class, style, ...){
myString <- "hello world"
tags$p(myString)
}
构建和运行窗口小部件会按预期生成字符串hello world
library(myWidgetHTML)
myHTML(message = "")
我无法弄清楚如何编写函数以便我可以将变量myString
传递给它:
#' @import htmltools
#' @export
myHTML_html <- function(id, class, style, myString, ...){
tags$p(myString)
}
通过source code for the widgets并没有任何启示,因为相关部分(下面复制)表明它通过...
接受了进一步的论证,但我看不到从哪里发送它们。
widget_html <- function(name, package, id, style, class, inline = FALSE, ...){
# attempt to lookup custom html function for widget
fn <- tryCatch(get(paste0(name, "_html"),
asNamespace(package),
inherits = FALSE),
error = function(e) NULL)
# call the custom function if we have one, otherwise create a div
if (is.function(fn)) {
fn(id = id, style = style, class = class, ...)
} else if (inline) {
tags$span(id = id, style = style, class = class)
} else {
tags$div(id = id, style = style, class = class)
}
}
答案 0 :(得分:2)
要结束这个问题,官方的答案是这是不可能的。
参考: 来自@timelyportfolio的This tweet
截至目前,还没有真正的方法来实现这个目标
我认为可能的解决方案是将x
传递给widget_html
,因此建议将其作为潜在的解决方案。然而,@ jjallaire指出,当与Shiny
参考: Issue 212
问题在于Shiny应用程序&#34; x&#34;当widget_html被调用时尚未知道。实现这一目标的最佳方法是在JavaScript端第一次调用renderValue时根据需要改变DOM。