簡體   English   中英

具有可重復使用頁面的“模塊化”閃亮應用程序

[英]“Modular” Shiny App with Reusable Page

我想設計一個“模塊化”的Shiny應用程序,因為我可以在不同的應用程序中重用它的大部分。 該應用程序包含一個由navbarPage或類似內容的不同頁面分隔的多步驟工作流。 我基本上希望使整個頁面(包括UI和服務器邏輯)都可以通過一對函數創建,然后可以在其他應用程序中重復使用以創建完全相同的頁面。 該頁面用於使用我設計的自定義javascript小部件控制流式細胞儀數據,但這並不重要。

簡而言之,將有一個具有兩個功能的R文件。 其中一個“ gatingPageUI”將返回一個tabPanel元素,其中包含頁面的所有UI元素。 為了避免輸入/輸出名稱沖突,將使用“前綴”參數,並將頁面上的所有輸入和輸出命名為“ .gating.widget”或“ .channel.x.select”。

第二個函數“ gatingPageLogic”將采用相同的“ prefix”參數,並將無功值分配給所有輸出,並創建觀察者以處理輸入中的更改。 它可能會創建一個reactValues對象,該對象將使用頁面生成的所有數據進行更新,並返回它或在父環境中創建它。

問題是我不知道如何從服務器邏輯功能中獲取和設置反應性值。 如果我將reactValues對象傳遞給該函數,在函數中創建的反應對象(觀察者和反應輸出)是否可以正常使用? 例如,我可能想傳遞一個ReactiveValues對象,該對象包含要操作的數據集,我可以以反應方式在函數內訪問該對象嗎? 返回反應性數據呢? 我可以只返回一個reactValues對象還是一個反應表達式?

還是這甚至是使用的正確模式?

一種方法是僅使用源代碼將一個應用程序的一部分包含在另一個應用程序中:

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中的代碼並對其進行擴展

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM