Блестящие закладки не работают, если я изменил форматирование числового ввода - PullRequest
1 голос
/ 23 мая 2019

Я хочу создать приложение с использованием Shiny, которое позволит пользователям создавать закладки для вводимых значений.Однако я обнаружил, что если я изменил формат ввода numericInput, закладки не будут работать.

На основе этой ссылки (https://beta.rstudioconnect.com/barbara/format-numbers/) для форматирования ввода numericInput. Iсоздал файл js с именем number_format.js и сохранил файл в каталоге www. Код выглядит следующим образом.

$(document).ready(function() {
  // Helper function to guarantee cross-browser compatibility
  // adapted from: http://stackoverflow.com/a/16157942
  function localeString(x, sep, grp) {
    var sx = (''+x).split('.'), s = '', i, j;
    sep || (sep = ',');            // default separator
    grp || grp === 0 || (grp = 3); // default grouping
    i = sx[0].length;
    while (i > grp) {
      j = i - grp;
      s = sep + sx[0].slice(j, i) + s;
      i = j;
    }
    s = sx[0].slice(0, i) + s;
    sx[0] = s;
    return sx.join('.');
  }

  // To change Number's input field (lose arrows and other functionality)
  $('#Number')[0].type = 'text';

  // To format the number when the app starts up
  $('#Number').val(localeString($('#Number').val()));

  // To format the number whenever the input changes
  $('#Number').keyup(function(event) {
    $(this).val(localeString($(this).val().replace(/,/g, '')));
  });
});

И вот код shiny с numericInputи кнопка закладки.

# Load the packages
library(shiny)
library(shinydashboard)

# User Interface
ui <- function(request) {
  dashboardPage(
    header = dashboardHeader(title = "Bookmark Example"),
    sidebar = dashboardSidebar(
      sidebarMenu(
        menuItem(
          text = "Example",
          tabName = "tab1"
        ),
        bookmarkButton()
      )
    ),
    body = dashboardBody(
      # Change tags
      tags$head(tags$script(src = "number_format.js")),
      tabItems(
        tabItem(
          tabName = "tab1",
          numericInput(inputId = "Number", label = "Number:", value = NA)
          )
        )
      )
  )
}

server <- function(input, output, session){
}

# Run the app
shinyApp(ui, server, enableBookmarking = "url")

При запуске этого кода ввод numericInput имеет правильный формат, но закладки не работают. Мы можем сравнить результаты, закомментировав строку tags$head(tags$script(src = "number_format.js")),чтобы убедиться, что закладки будут работать, если число не будет автоматически отформатировано.

Можно ли одновременно включить автоматическое форматирование и создание закладок?

1 Ответ

1 голос
/ 24 мая 2019

Вот обходной путь:

# Load the packages
library(shiny)
library(shinydashboard)

# User Interface
ui <- function(request) {
  dashboardPage(
    header = dashboardHeader(title = "Bookmark Example"),
    sidebar = dashboardSidebar(
      sidebarMenu(
        menuItem(
          text = "Example",
          tabName = "tab1"
        ),
        bookmarkButton()
      )
    ),
    body = dashboardBody(
      # Change tags
      tags$head(tags$script(src = "number_format.js")),
      tabItems(
        tabItem(
          tabName = "tab1",
          numericInput(inputId = "Number", label = "Number:", value = NA)
        )
      )
    )
  )
}

server <- function(input, output, session){

  bigMarkInputs <- c("Number")

  setBookmarkExclude(bigMarkInputs)

  onBookmark(function(state){
    for (bigMarkInput in bigMarkInputs){
      state$values[[bigMarkInput]] <- isolate({input[[bigMarkInput]]})
    }
  })

  onRestore(function(state){
    for (bigMarkInput in bigMarkInputs){
      updateNumericInput(session, inputId = bigMarkInput, value = state$values[[bigMarkInput]])
    }
  })

}

# Run the app
shinyApp(ui, server, enableBookmarking = "url")
...