Shiny.onInput - 对每次点击JS

时间:2017-05-24 15:00:01

标签: javascript jquery r shiny listener

可能很容易问题。我不太熟悉Shiny项目中嵌入的Javascript,并且无法正确使用

我有一个gVis表,选择行的唯一方法是使用js监听器。我的听众很容易,为变量分配一行(这里是 sustable

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

我想要实现的是改变下面的表 - 将值从TRUE更改为FALSE以及每次单击时的另一种方式 所以我有一个简单的观察者

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

正如您可能期望的那样,它会改变我需要它的方式,但它仅在值更改时触发 - 所以如果我在同一个项目上单击两次,则不会触发第二个事件。

如何在每次点击时获得触发器?或者也许我应该更改监听器而不将值传递给观察者(如果是这样,怎么样?有没有变化的Shiny.onInput?)

2 个答案:

答案 0 :(得分:1)

我使用的解决方案是添加第二个输入,即input$trigger,我将其添加到javascript部分。为他分配一个随机数确保他在每次点击时触发并触发服务器功能中观察者的代码。

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

然后让服务器代码听取:

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

答案 1 :(得分:0)

我找到了将js脚本与shinyjs相结合的答案 我将onclick事件添加到读取侦听器的gvis表中,然后更改数据 到了ui:

useShinyjs(),
extendShinyjs(text = jsCode),

和服务器:

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

当然BigDataScientist的回答同样好,因为它要求像我一样创建另一个实体

注意:这里的sussimilar是gVisTable名称,而不是任何特定的函数