2016-09-19 3 views
1

Ich möchte eine Bewertung Eingang in Verbindung mit der shinyjs::reset() Funktion verwenden. Alles funktioniert gut außer der Reset-Funktion. Irgendwelche Hinweise?Bewertung zurücksetzenEingabe in glänzende App

Hier ist mein Minimalbeispiel:

library(shiny) 
devtools::install_github("stefanwilhelm/ShinyRatingInput") 
library(ShinyRatingInput) 
library(shinyjs) 

ui <- shinyUI(bootstrapPage(
    useShinyjs(), 
    ratingInput("movieRating", label="Rate this movie...", dataStop=5), 
    htmlOutput("movieRatingout"), 
    actionButton("resetbtn", "reset") 
)) 

#the corresponding server.R 
server <- shinyServer(function(input, output, session) { 
    output$movieRatingout <- renderText({ 
    paste("The movie was rated ",input$movieRating) 
    }) 

    observeEvent(input$resetbtn, { 
    reset("movieRating") 
    }) 

}) 


shinyApp(ui, server) 
+0

einen Blick auf den Code haben für 'shinyjs :: reset()' durch Eingabe von 'reset' an der Konsole ohne Klammern. Es hat eine Reihe von 'if'-Anweisungen, die nach bekannten Shiny-Eingabetypen suchen, damit sie mit jedem korrekt umgehen können. Es weiß nichts über Ihre "ratingInput" -Funktion. Es sieht so aus, als könnten Sie es zum Laufen bringen, wenn Sie eine 'updateRatingInput'-Funktion schreiben. Ich bin mir aber nicht sicher, ob ich das 'type'-Attribut setzen soll. –

+1

Leider ist es nicht so einfach - es gibt auch Code im JavaScript, der erkennt, um welche Art von Eingabe es sich handelt. Ich habe mir nur dieses Bewertungspaket angesehen und es scheint, als ob es nur eine Handvoll Leute gibt, die es benutzen, aber wenn es ein bisschen populärer wird, werde ich Unterstützung für das Zurücksetzen hinzufügen. Bis dahin empfehle ich, Ihren eigenen benutzerdefinierten Code zu schreiben, um ihn zurückzusetzen –

+0

Ok, ich sehe, danke! – sammerk

Antwort

1

Sie manualy Reset-Aktion erstellen js

1) Fügen Sie Symbole (set Breite Vordergrund == 0)

jsCode <-"shinyjs.reset_1 = function(params){$('.rating-symbol-foreground').css('width', params);}"

zurücksetzen

2) Fügen Sie diese js zu app hinzu unter Verwendung extendShinyjs

3) hinzufügen session$sendInputMessage Eingang zum Zurücksetzen (set value == NULL)

Arbeitsbeispiel

jsCode <-"shinyjs.reset_1 = function(params){$('.rating-symbol-foreground').css('width', params);}" 
ui <- shinyUI(bootstrapPage(
    useShinyjs(), 
    extendShinyjs(text = jsCode), 
    ratingInput("movieRating", label="Rate this movie...", dataStop=5), 
    htmlOutput("movieRatingout"), 
    actionButton("resetbtn", "reset") 
)) 

#the corresponding server.R 
server <- shinyServer(function(input, output, session) { 
    output$movieRatingout <- renderText({ 
    paste("The movie was rated ",input$movieRating) 
    }) 

    observeEvent(input$resetbtn, { 
    session$sendInputMessage("movieRating", list(value = NULL)) 
    js$reset_1(0) 

    }) 

}) 
Verwandte Themen