我正在尝试创建一个具有2个不同的自定义输出控件的Shiny应用程序。每个输出控件在单独的.js文件中都有自己的JavaScript绑定(Shiny.OutputBinding()
)。
如何将特定的输出绑定链接到特定的输出控件?
为了演示,我上传了一个MWE as a gist,因为它是3个单独的文件。要运行,请下载文件并将.js文件放在www
子目录中。
这个例子很简单。有两个输出控件,redOutput
和blueOutput
。两个输出在一个<span>
元素中都有蓝色或红色的接收值。
文件作为一个单例链接,如果控件被多次包含,则避免多次包含脚本。
会发生什么:
如果ui中只有一个控件,则它会按预期工作。 JavaScript绑定链接在头部的<script>
标签中,我们很高兴。
如果两个控件都放在ui中,则两个 JavaScript文件都链接在头部,后者优先。
我如何同时拥有两个 控件,每个控件都有自己的Shiny.outputBindings
?
答案 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");
},
是的,解决方案在注释中写得很清楚,我只是一点都没有。