我试图让用户在Shiny应用程序中将文本框作为模块生成,以便将其输入包含在该应用程序生成的R降价报告中。
我(终于)成功了,但是我所做的事情感觉很棘手,而且可能是不好的做法。我使用以下代码托管应用程序的这一部分:https://olivrm.shinyapps.io/add_modules/
我不满意的部分是:
<div id="wrapper">
<svg id="meter">
<circle id="low" r="150" cx="50%" cy="50%" stroke="#FF0000" stroke-width="60" stroke-dasharray="707, 943" fill="none"></circle>
<circle id="avg" r="150" cx="50%" cy="50%" stroke="#FFFF00" stroke-width="60" stroke-dasharray="471, 943" fill="none"></circle>
<circle id="high" r="150" cx="50%" cy="50%" stroke="#008000" stroke-width="60" stroke-dasharray="236, 943" fill="none"></circle>
<circle id="mask" r="150" cx="50%" cy="50%" stroke="#a9a9a9" stroke-width="65" fill="none"></circle>
</svg>
</div>
</app-shell>
</template>
<script>
var cf = 943;
var semi_cf = 250;
document.querySelector('#mask').setAttribute("stroke-dasharray", semi_cf + "," + cf);
</script>
内部的所有事件。我将输入保存为默认文本框值,因为每次添加新组件时它们都会重新生成。observeEvent(input$add_module, {...}
。使用texts
和parse()
似乎不太好,但是我不知道该如何使用其他内容。那么关于一个特定问题:您应该如何动态地将模块添加到Shiny应用程序,以及如何访问它们的返回值?
我以前从未使用过Shiny,所以我很想知道处理这种事情的“正确”方法。
这是代码,以防Shinyapps.io无法正常工作(或稍后删除)。
eval()