我成功实现了 Shiny 的绑定(bind)功能,但该函数是在 ui.R 中定义的,并且来自 server.R 的任何对此新输入的调用都会导致函数未找到错误。
我将 session
传递给 server.R (不确定这是否有什么不同),并且我还创建了一个 global.R,其中只包含该函数(不确定我是否需要其他功能)因为这甚至不允许我调用 ui.R 中的函数)。
如何从 server.R(特别是在 renderUI
中)调用自定义 Shiny 输入函数?
此处的示例代码:(对 sortList
的调用在 ui.R 中工作正常,但在 server.R 中则不然)
https://gist.github.com/jpd527/9687359
最佳答案
这是一个修补后的要点:https://gist.github.com/trestletech/9691459
主要有两个changes这里:
- 我移动了
sortListInput
函数为global.R
。您提到您已经尝试过这样做,但它可以顺利地将函数公开给server
和UI
. - 下一个问题是您仅初始化
sortListInput
在页面创建时。你有$( ".sortableList" ).sortable(); $( ".sortableList" ).disableSelection();
在单例中<script>
在你的<head>
,但这只会在页面创建时运行一次。这样动态创建了sortableLists
稍后创建的将永远不会被初始化。所以我添加了一个<script>
block 到你的sortListInput
每次生成新代码时都会运行该代码。我现在不知道有一种更干净的方法可以做到这一点,但也许确实/将会存在......
需要注意的几点:
- 由于您现在正在初始化所有
sortListInputs
每次动态创建时,您都需要确保该初始化代码是幂等的 - 即,当您运行该代码时不会破坏现有的代码。 - 我注意到您正在加载您自己的 jQuery 版本和其他一些 jQuery 库。请注意这一点,因为 Shiny 也有它所依赖的 jQuery 版本。您需要确保不存在任何冲突。
关于r - 从 server.R 调用 "bind"-ed 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546653/