2017-12-16 8 views
1

id = "textBox"のテキストエリアにエディタクラスを適用するためにこのコードを書いています。エディタクラスを適用するには、実行するjavascriptコードが必要で、javascriptの実行をアプリケーションの起動時(またはアプリケーションのロード時)にバインドする方法を探していました。基本的には、現在実装されているように、ボタンを押してボタンをバインドする必要なく、アプリケーションが読み込まれるときにjsを実行したいと考えています。アプリの読み込みイベントを参照する方法がわかりません。ボタンの実装は私が思いつくことができ、尋ねる前にかなりの時間を費やしていた最高でした。光沢のあるアプリケーションをロードするときにJSスクリプトをトリガーする方法

コードを実行する方法の詳細については、thisの質問を参照してください。

これ以上情報が必要な場合は教えてください。喜んで義援金をするでしょう。前もって感謝します。

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

答えて

1

アプリを開くときにJavaScriptコードを実行するには、コードをオブザーバーに配置する必要はありません。次のコードを使用して、サーバを交換する場合は、ログがラインログに次の行がReferenceError: Can't find variable: CodeMirrorですが"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%");') 
    } 

が含まれていることがわかりますので、私はあなたのコードから抜けているものがあると思いますか?

希望すると便利です。

+0

参照エラーは、アプリのwwwフォルダにいくつかのjavascriptとcssファイルが存在しないためです。それらを追加して、もう一度やり直してください。私はあなたのソリューションを試してrunjsが自動的に実行されません。私は以前これを試していた。上の質問のリンクにあるファイルを見つけることができます。ありがとう!! –

関連する問題