【问题标题】:Shiny.onInput - react on every click JSShiny.onInput - 对每次点击 JS 做出反应
【发布时间】:2017-10-25 00:25:08
【问题描述】:

可能很简单的问题。我对嵌入在 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 没有更改?)

【问题讨论】:

    标签: javascript jquery r shiny listener


    【解决方案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]
    })
    

    【讨论】:

      【解决方案2】:

      我找到了结合 js 脚本和 shinyjs 的答案 我将 onclick 事件添加到读取侦听器然后更改数据的 gvis 表中 到用户界面:

      useShinyjs(),
      extendShinyjs(text = jsCode),
      

      到服务器:

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

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

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

      【讨论】:

      • 非常感谢您也在寻找答案并找到了答案。如果您使您的答案和问题可重现,那就太好了。不知道jsCodesussimilar是什么,...
      • 对不起。 extendShinyjs(text = jsCode) 只是您插入 UI 以使用扩展的 shinyjs 的命令,我没有命名任何 jsCode,但据我了解,它只是允许从外部使用 JS 代码的语法。例如,如果一个 JS 过程名称是 foo,那么您可以使用 R 中的 jsCode$foo。正如我所说,我没有使用它。 sussimilar 只是我正在处理的表。很抱歉没有插入完整的示例,因为它是一个大型结构,其中 99% 与查询无关
      • 这只是一个关于如何在 SO 上欣赏帖子的提示 :) 如果我的解决方案有效,我将不胜感激:)。但是你真的确定你没有将JS代码存储在变量JSCode中吗?否则我会期待一个错误。
      • 对不起,我认为接受是被提问的人赞成。确实缺少 JSCode 在我重新启动 R 后导致错误,我安全地删除了该行并且它仍然有效
      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多