Я хочу создать приложение с использованием 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")),
чтобы убедиться, что закладки будут работать, если число не будет автоматически отформатировано.
Можно ли одновременно включить автоматическое форматирование и создание закладок?