2017-05-24 2 views
0

probablement assez facile question. Je ne suis pas trop familier avec Javascript incorporé dans les articles brillants et ne peux pas obtenir celui-ci droitShiny.onInput - réagir à chaque clic JS

J'ai une table de gVis et la seule manière d'obtenir la ligne choisie est d'utiliser un écouteur de js. Mon auditeur est assez facile, l'affectation d'une ligne à une variable (ici sustable)

sussimilar_click <- sprintf("var sustable = chart.getSelection()[0]['row']; 
    Shiny.onInputChange('sustable', sustable);") 

ce que je veux obtenir est de modifier la table sous - modification de la valeur de TRUE à FALSE et dans l'autre sens avec tous les cliquez sur j'ai donc un simple observateur

observe({input$sustable 
    values$datAll1[input$sustable+1,3] <- !values$datAll1[input$sustable+1,3] 
    }) 

Comme on pouvait s'y attendre il change la façon dont j'ai besoin, mais il ne se déclenche que sur un changement de valeur - donc si je clique deux fois sur le même article il ne serait pas tirer la 2ème événement

Comment puis-je obtenir le déclencheur à chaque clic? Ou peut-être devrais-je changer l'écouteur sans passer la valeur à l'observateur (si oui, comment?) Y at-il un Shiny.onInput sans changement?)

Répondre

1

La solution que j'utilise pour cela est d'ajouter une seconde entrée, à savoir input$trigger, qui J'ajoute à la partie javascript. L'assignation d'un nombre aléatoire assure qu'il se déclenche à chaque clic et déclenche le code de l'observateur dans la fonction serveur.

Shiny.onInputChange('sustable', sustable); 
Shiny.onInputChange('trigger', Math.random()); 

puis laisser le code serveur écouter sur ce point:

observeEvent(input$trigger, { 
    values$datAll1[input$sustable+1,3] <- !values$datAll1[input$sustable+1,3] 
}) 
0

J'ai trouvé la réponse combinant le script js avec shinyjs i ajouté événement onclick à la table de GVIS qui lit l'auditeur, puis modifie les données à l'interface utilisateur:

useShinyjs(), 
extendShinyjs(text = jsCode), 

et au serveur:

onclick("sussimilar", { 
    values$datAll1[input$sustable+1,3] <- !values$datAll1[input$sustable+1,3] 
    }) 

bien sûr BigDataScientist » réponse est tout aussi bon qu'il appelle à créer une autre entité comme le mien

Note: sussimilar ici est le nom gVisTable, aucune fonction particulière

+0

j'apprécie fortement que vous aussi à la recherche pour une réponse et aussi trouvé un. Serait génial si vous faites votre réponse et question reproductible. On ne sait pas ce que 'jsCode' et' sussimilar' sont, ... – BigDataScientist

+0

désolé. extendShinyjs (text = jsCode) est juste une commande que vous insérez dans l'interface utilisateur pour utiliser shinyjs étendu, je n'ai nommé rien jsCode, mais d'après ce que je comprends c'est juste la syntaxe permettant d'utiliser le code JS de l'extérieur. Si un nom de procédure JS est par exemple foo, vous pouvez utiliser jsCode $ foo de R. Comme je l'ai dit je ne l'ai pas utilisé. Sussimilar est juste la table sur laquelle je travaillais. Désolé de ne pas avoir inséré l'exemple complet, car c'est une grande structure et 99% ne sont pas pertinents à la requête – Slav

+0

c'était juste un indice sur comment les messages sont appréciés ici sur SO :) Si ma solution fonctionne j'apprécierais un upvote:). Mais êtes-vous sûr que vous n'avez pas de code JS stocké dans la variable 'JSCode'. Sinon, je m'attendrais à une erreur. – BigDataScientist