我想一个随机生成的字符串推到UI上一个文本。 新来的HTML /闪亮/ JS,但我知道的一些基本知识。
我的最终目标是使用CodeMirror( 全下载 )或ShinyAce编辑类语法高亮添加到textarea的,但我无法输出字符串从服务器到textarea的。 我想推某些R守则textStringToDisplay
,需要语法高亮。
请把以下文件中app.R的WWW文件夹:
- codemirror.css
- cobalt.css
- codemirror.js(我找不到GitHub上的这个文件,请使用下载链接上方,提取和看在lib文件夹中)
- r.js
请让我还是知道,如果你需要更多的信息,如果我要改写这个任何部件。 提前致谢。
library(shiny)
if (interactive()) {
ui <- shinyUI(
fluidPage(
tags$head(tags$title("Title"),
tags$link(rel = "stylesheet", href = "codemirror.css"),
tags$link(rel = "stylesheet", href = "cobalt.css"),
tags$script(src = "codemirror.js"),
tags$script(src = "r.js")
),
tags$textarea(id="textBox", name = "Feedback", textOutput(outputId = "textStringToDisplay")),
tags$script(
'var editorR = CodeMirror.fromTextArea(textBox, {
mode: "r",
lineNumbers: true,
smartindent: true
});
editorR.setOption("theme", "cobalt");
editorR.setSize("50%","100%");')))
server <- function(input, output){
output$textStringToDisplay <- renderText(paste0(sample(letters,15),collapse = ""))
}
shinyApp(ui = ui, server = server)
}
你好,因为我做的不是哪里出了问题我已经注释掉你的CSS和Java脚本。 你的问题是一样的在这一问题
如何创建在R闪亮的应用程序变量超链接
这里是你的代码的工作版本
library(shiny)
if (interactive()) {
ui <- shinyUI(
fluidPage(
tags$head(tags$title("Title")
# tags$link(rel = "stylesheet", href = "codemirror.css"),
# tags$link(rel = "stylesheet", href = "cobalt.css"),
# tags$script(src = "codemirror.js"),
# tags$script(src = "r.js")
),
uiOutput(outputId = "textStringToDisplay")
# tags$script(
# 'var editorR = CodeMirror.fromTextArea(textBox, {
# mode: "r",
# lineNumbers: true,
# smartindent: true
# });
# editorR.setOption("theme", "cobalt");
# editorR.setSize("50%","100%");')
))
server <- function(input, output){
output$textStringToDisplay <- renderUI(
tags$textarea(id="textBox", name = "Feedback", paste0(sample(letters,15),collapse = "")))
}
shinyApp(ui = ui, server = server)
}
这是我的最终实现。 衷心感谢@Bertil他就建议renderUI
。 只好用shinyjs
包和runjs
函数来获取JS脚本运行。 此外,它只有在与事件配对(如单击一个按钮)的作品。 不知道如何触发它,当应用程序加载(稍后会发布有关此有时另一个问题)。
library(shiny)
library(shinyjs)
if (interactive()) {
ui <- shinyUI(
fluidPage(
useShinyjs(),
tags$head(tags$title("Title"),
tags$link(rel = "stylesheet", href = "codemirror.css"),
tags$link(rel = "stylesheet", href = "cobalt.css"),
tags$script(src = "codemirror.js"),
tags$script(src = "r.js")
),
actionButton("btn1","Click to see code"),
uiOutput(outputId = "textStringToDisplay")))
server <- function(input, output){
output$textStringToDisplay <- renderUI(
tags$textarea(id="textBox", name = "Feedback", paste0(sample(letters,15),collapse = "")))
ButtonPressCounter <- 0
observeEvent(input$btn1,
{
ButtonPressCounter <<- ButtonPressCounter + 1 # Need it to happen only once
if(ButtonPressCounter <= 1){
shinyjs::runjs(
'var editorR = CodeMirror.fromTextArea(textBox, {
mode: "r",
lineNumbers: true,
smartindent: true});
editorR.setOption("theme", "cobalt");
editorR.setSize("100%","100%");')
}
})
}
shinyApp(ui = ui, server = server) }
文章来源: Need to display dynamic text generated from server onto UI within a TextArea(with syntax highlighting)