如何将变量传递给 widget_html

How do you pass variables into widget_html

问题

Custom widget HTML 上 htmlwidgets.org 页面的最后一部分说您可以通过创建名为 <widget_name>_html[=25= 的函数将自己的 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)
}

构建和 运行ning 小部件按预期生成字符串 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)
  }
}

关闭这个问题,官方回答是不可能的。

参考: This tweet 来自@timelyportfolio

as of now, no real way to accomplish this

我认为一个可能的解决方案是将 x 传递给 widget_html,因此将其作为一个潜在的解决方案提出。但是,@jjallaire 指出这在与 Shiny

一起使用时不起作用

参考: Issue 212

The problem is that within Shiny applications "x" is not yet known at the time widget_html is called. The best way to accomplish this is to mutate the DOM as needed within the first call to renderValue on the JavaScript side.