"模块化"具有可重用页面的闪亮应用程序

时间:2014-08-25 19:06:45

标签: r shiny

我想设计一个闪亮的应用程序,它是"模块化的"从某种意义上说,我可以在不同的应用程序中重用它的大部分内容。该应用程序包含由navbarPage的不同页面或类似内容分隔的多步骤工作流程。我基本上想要创建一个完整的页面,包括UI和服务器逻辑,可以从一对函数创建,然后我可以在其他应用程序中重用它们来创建完全相同的页面。该页面用于使用我设计的自定义JavaScript小部件来控制流式细胞仪数据,但这并不重要。

简而言之,会有一个带有两个函数的R文件。一个' gatingPageUI',将返回包含页面的所有UI元素的tabPanel元素。它需要一个'前缀'参数和名称页面上的所有输入和输出' .gating.widget'或' .channel.x.select'或者其他什么,以避免输入/输出名称冲突。

第二个功能' gatingPageLogic'将使用相同的前缀'参数并为所有输出分配无效值,并创建观察者来处理输入的变化。它可能会创建一个reactiveValues对象,该对象将使用页面生成的所有数据进行更新,并返回它或在父环境中创建它。

问题是我不知道如何从服务器逻辑功能中获取和设置反应值。如果我将reactiveValues对象传递给函数,函数中创建的反应对象(观察者和被动输出)是否可以正常工作?例如,我可能想要传递包含要操作的数据集的ReactiveValues对象,我可以以被动方式访问函数内的那个吗?返回被动数据怎么样?我可以只返回reactiveValues对象或反应式表达式吗?

或者这甚至是正确使用的模式吗?

1 个答案:

答案 0 :(得分:0)

一种方法是使用source将一个应用程序的部分包含在另一个应用程序中:

for(file in list.files(c("../base/tools/app", 
                          "../base/tools/data"),
                          pattern="\\.(r|R)$", full.names = TRUE))
      source(file, local = TRUE)

此方法允许您在不同的应用程序中重用代码块。在我的情况下,每个应用程序都在同一个inst /目录中,上面的代码块在inst / quant中。 quant重用inst / base中的代码并扩展它