runjs, чтобы изменить местоположение в наблюдаемом событии в flexdashboard? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть flexdashboard, и есть кнопка действия, которая делает это:

actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success",
         onClick="location.href='#section-your-results';")

затем наблюдатель, который делает это:

observeEvent(input$submit,{
  some calculation
})

Проблема заключается в том, что часть onClick выполняется до того, как будет запущен наблюдатель. Так что расчет не относится к разделу, к которому я прыгаю.

Что я хочу сделать, это:

 actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success")

, а затем есть наблюдатель, который делает это:

observeEvent(input$submit,{
  some calculation
  useShinyjs()
  runjs("location.href='#section-your-results';")
}))

Но по какой-то причине команда runjs не выполняется (я также пытался заменить location.href на alert для подтверждения. Любая идея о том, что идет не так? Я видел этот ответ и попробовал этот подход, но не повезло.

Вот (для меня) воспроизводимый пример - я ожидаю всплывающее окно с предупреждением, когда я нажимаю кнопку отправить, но это не для меня

---
title: "reprex shinyjs rmd"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shinyjs)
useShinyjs(rmd = TRUE)
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
onclick("submit",runjs('alert("Hello! I am an alert box!!");'))

```

### Chart B

```{r}
actionButton(inputId="submit",
         label = "Submit answers",
         class="btn btn-success")
```

1 Ответ

0 голосов
/ 11 мая 2018

Таким образом, чтобы заставить это работать, мне нужно было сделать две вещи:

  1. Переключить расположение useShinyjs() на ненастроенный чанк.
  2. Измените onClick на onEvent и следите за событием нажатия входного сигнала.

Я думаю, это потому, что блестящий элемент ввода отключается по умолчанию.событие для кнопки и, следовательно, shinyjs наблюдает за тем, чего никогда не происходит.

Вот воспроизводимый пример, который работает.

---
title: "reprex shinyjs rmd"
output: 
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: scroll
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shinyjs)
```

Column {data-width=650}
-----------------------------------------------------------------------


```{r}
useShinyjs(rmd = TRUE)
actionButton(inputId="submit",
             label = "Submit answers",
             class="btn btn-success")
```


```{r}
observeEvent(input$submit, {
  runjs('alert("Hello! I am an alert box!!");')
})
```
...