2017-12-16 3 views
1

Ich schrieb diesen Code, um die Editor-Klasse auf die TextArea mit ID = "TextBox" anzuwenden. Das Anwenden der Editor-Klasse benötigt einen JavaScript-Code zum Ausführen und suchte nach einer Möglichkeit, den Javascript-Lauf an das Ereignis zum Starten der App zu binden (oder wenn die App geladen wird). Im Wesentlichen möchte ich die js laufen lassen, wenn die App geladen wird, ohne sie an einen Knopfdruck zu binden, wie es gegenwärtig implementiert wird. Ich weiß nicht, wie ich auf das App-Ladeereignis Bezug nehmen soll. Die Knopfimplementierung war die beste, die ich mir vorstellen konnte, und ich habe viel Zeit aufgewandt, bevor ich gefragt habe.Wie JS-Skript auslösen, wenn glänzende App lädt

Weitere Informationen zum Ausführen des Codes finden Sie unter this Frage.

Lassen Sie mich wissen, wenn Sie mehr Informationen dazu benötigen. Würde mich freuen, zu verpflichten. Danke im Voraus.

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) } 

Antwort

1

Um beim Öffnen der App JavaScript-Code ausführen, Sie don‘t müssen den Code in einem Beobachter setzen. Wenn Sie Ihren Server mit dem folgenden Code ersetzen, sehen Sie, dass das Protokoll die Linie "hello, this code has run."

server <- function(input, output){ 
    output$textStringToDisplay <- renderUI(
     tags$textarea(id="textBox", name = "Feedback", paste0(sample(letters,15),collapse = ""))) 

    shinyjs::runjs(
     'console.log("hello, this code has run."); 
     var editorR = CodeMirror.fromTextArea(textBox, { 
         mode: "r", 
         lineNumbers: true, 
         smartindent: true}); 
         editorR.setOption("theme", "cobalt"); 
         editorR.setSize("100%","100%");') 
    } 

Obwohl die nächste Zeile im Protokoll ReferenceError: Can't find variable: CodeMirror ist enthalten, so dass ich denke, es ist etwas aus dem Code fehlt?

Hoffe, das hilft!

+0

Der Referenzfehler liegt darin, dass einige Javascript- und CSS-Dateien nicht im www-Ordner Ihrer App vorhanden sind. Würde es Ihnen etwas ausmachen, sie hinzuzufügen und es noch einmal zu versuchen? Ich habe Ihre Lösung versucht und die Runjs laufen nicht automatisch. Ich hatte das schon mal probiert. Sie können die Dateien in dem Link in der obigen Frage finden. Vielen Dank!! –

Verwandte Themen