2016-07-27 21 views
1

私の目標は、条件がグローバル変数falseである条件付きパネルにtabsetPanelをラップすることです。条件がグローバル変数であるShiny ConditionalPanelを持つことは可能ですか?

ui.R

mainPanel(
conditionalPanel("searchPage == \"false\"", 
    tabsetPanel(
     tabPanel("Summary",htmlOutput("summary")), 
     tabPanel("Description", htmlOutput("description")) 
))), 

global.Rその後、server.RIで

searchPage <- "true" 

いくつかの異なる回、それに新しい値を割り当てますが、このようなすべての

observeEvent(input$openButton, 
      output$results <- renderUI({ 
      textOutput("") 
      searchPage <- "false" 
      })) 

私が何をしていても、私はいつも「Uncaught ReferenceError:searchPageは定義されていません。私は< - または< < - を使って、引用符を使用しないで引用符を使用する複数の異なる組み合わせにglobal.Rを変更しようとしました。this.searchPage、my.searchPageなど多数のことを(もちろん常にserver.Rとui.Rもマッチします)、運がまったくありませんでした。

+0

これは 'shinyjs :: toggle()'の古典的な使用法です。条件がシンプルな入力のJavaScript式ではない条件付きで表示する必要があるたびに、shinyjs :: show()またはhide()またはtoggle()を使用します。 –

+0

プロジェクト全体でトグル/非表示/しかし、私はパネル全体にidを割り当てることができるのか分からないので、パネル全体を隠すために何を呼びますか? –

+1

divのIDを持つパネル全体をラップするだけで済みます。したがって、mainPanel(div(id = "mainpanel"、...))のようなパネルを定義してください。パネルにIDがあります –

答えて

1

を役に立てば幸い、これはshinyjstoggle()/show()/hide()機能のための完璧なユースケースです。条件が単純な入力のJavaScript式でないものを条件付きで表示する必要がある場合は、conditionalPanel()の代わりにこれらの関数を使用するのは簡単です。

これらの機能を使用するには、表示/非表示にする要素を指定する必要があります(この場合はmainPanel())。これを行う簡単な方法は、div内のパネル全体をIDで囲むだけです。したがって、パネルにmainPanel(div(id = "mainpanel", ...))のようなパネルを定義して、あなたのパネルにIDがあります。サーバコードにするときはいつでも、shinyjs::show("mainpanel")またはhide()と呼ぶことができます。

1

あなたがしようとしていることは、あなたがそれをやろうとしている方法ではありません(サーバーとクライアントは異なる環境にあり、変数を共有しません)。サーバーからクライアントに明示的に値を渡す必要があります。そのためには、さまざまなアプローチがあります。片道:

library(shiny) 
runApp(list(ui = fluidPage(
    conditionalPanel(condition='output.bool', 
        HTML("Hello world")), 
    actionButton("btn","Press me to toggle") 
), 
server = function(input, output, session) { 
    value=TRUE 
    output$bool <- eventReactive(input$btn,{ 
    value  
    }) 
    outputOptions(output,"bool",suspendWhenHidden=FALSE) 

    observeEvent(input$btn, 
       value <<- !value   
) 

})) 

おそらく、より良いアプローチがあります。質問の投稿にコメントで述べたように、これは

+0

ありがとう!あなたのデモは完璧に動作しますが、何らかの理由で私のプロジェクトで正常に機能するようになっています(常にパネルを表示する、または決してしない)。私はそれを試し続けますが、outputOptionsについて説明してもらえますか?基本的にoutput.boolを宣言していますか? –

+0

出力オプションは基本的にサーバーにboolの値が常にクライアント側に公開されるように指示します。 – Carl

+0

大丈夫、助けてくれてありがとう!私は今半分作業している - それは毎回動作します(それはショーのための1つのボタン、非表示のための1つのボタンです)ので、私は少なくとも進歩を作っています。 –

関連する問題