Shiny:将Shiny.outputBindings与输出链接(具有多个输出的问题)

时间:2018-11-30 13:24:23

标签: r shiny

我正在尝试创建一个具有2个不同的自定义输出控件的Shiny应用程序。每个输出控件在单独的.js文件中都有自己的JavaScript绑定(Shiny.OutputBinding())。

如何将特定的输出绑定链接到特定的输出控件?

为了演示,我上传了一个MWE as a gist,因为它是3个单独的文件。要运行,请下载文件并将.js文件放在www子目录中。

这个例子很简单。有两个输出控件,redOutputblueOutput。两个输出在一个<span>元素中都有蓝色或红色的接收值。

文件作为一个单例链接,如果控件被多次包含,则避免多次包含脚本。

会发生什么:

如果ui中只有一个控件,则它会按预期工作。 JavaScript绑定链接在头部的<script>标签中,我们很高兴。

如果两个控件都放在ui中,则两个 JavaScript文件都链接在头部,后者优先。

我如何同时拥有两个 控件,每个控件都有自己的Shiny.outputBindings

1 个答案:

答案 0 :(得分:0)

答案在于绑定find函数。将要点更新为以下内容(蓝色):

app.R

blueOutput <- function(inputId) {
  tagList(
      singleton(tags$head(tags$script(src="blue.js"))),
      div(id=inputId, class='blueOutput')
  )
}

blue.js

  find: function(scope) {
    // For the given scope, return the set of elements that belong to
    // this binding.
    return $(scope).find(".blueOutput");
  },

是的,解决方案在注释中写得很清楚,我只是一点都没有。

gist has been updated to reflect the solution