我正在编写一个Shiny应用程序,它将部署在各种用户之间,屏幕分辨率从720p到1080p不等。该应用程序将部署在Web上。
我的页面有一个简单的侧边栏和一个主要内容区域。为了调整侧边栏的宽度(包含所有内容而不进行任何滚动),我在UI.r中使用了两个conditionalPanels
,它通过评估"screen.width > 1600"
或"screen.width < 1600"
来渲染适当的1080p或720p UI。
这很好,并根据需要呈现适当的UI。
但是,在对应用程序进行概要分析后,我意识到虽然确实显示了相应的UI面板,但我的服务器代码仍然呈现高分辨率和低分辨率输出,即使在任何给定时间只显示一个。
有没有办法禁用未显示的输出?我正在研究使用全局变量,因为屏幕宽度在会话期间永远不会改变,但我在使用shinyjs和评估"screen.width"
表达式时出现问题 - 它似乎返回NULL
,但在conditionalPanel
内部
谢谢
没有最小可重复的示例,提供解决方案是困难的。但req
或validate
和need
可能是你想要的。
req
用于检查执行前存在的值:req documentation。
validate
和need
可以以非常相似的方式一起使用:validate documentation。
例如,您可以尝试:
output$my_1080_plot = renderPlot(
validate(need(screen.width > 1600, message = FALSE))
# other commands to make plot
)
如果不满足逻辑条件,则评估停止,另一个命令不运行。