【问题标题】:Search from a textInput to a Handsontable in Shiny在 Shiny 中从 textInput 搜索到 Handsontable
【发布时间】:2018-02-27 13:53:13
【问题描述】:

我已经在 Shiny 中使用 Handsontable 工作了几天,我陷入了一个我认为将是一个非常愚蠢的问题,但我不知道如何解决。

我有一个具有自定义功能的 Handsontable,它允许搜索并且它可以工作。它可以工作,但不够直观,因为您必须右键单击表格才能弹出搜索选项。

因此,我决定我想要一个 textInput,它具有相同的功能,但方式更漂亮。我知道它应该与输入变量 (input$searchId) 的 observeEvent 相关,但由于我缺乏使用 Shiny 和 Handsontable 的经验,我不知道该怎么做。

这是来自 server.R 的代码,用于打印表格并具有允许用户搜索的自定义函数。

output$hot <-renderRHandsontable({rhandsontable(Dataset(),height = 600)%>%   
hot_table( columnSorting = TRUE,highlightCol = TRUE, highlightRow = TRUE, search = TRUE) %>% 
hot_context_menu(
  customOpts = list(
    search = list(name = "Search",
                  callback = htmlwidgets::JS(
                    "function (key, options) {
                     var aux = document.getElementById('searchId').value;
                     var srch = prompt(Search);

                     this.search.query(srch);
                     this.render();
                   }")))) })

我想要的是存档相同的结果,但不必右键单击表格并创建提示。

非常感谢,

【问题讨论】:

    标签: r shiny shiny-server rhandsontable


    【解决方案1】:

    好吧,我已经能够解决我的问题了。我受到this post 的启发 然后我得到了类似的东西:

    js_search <- "
    $(document).ready(setTimeout(function() {
      document.getElementById('searchId').onchange = function(e){
        var hot_instance = HTMLWidgets.getInstance(hot).hot
        console.log('hola')
        var aux = document.getElementById('searchId').value;
        hot_instance.search.query(aux);
        hot_instance.render();
      }
    }))
    "
    

    这必须包含在您的 ui.R 中,并带有 tags$head(tags$script(HTML(js_search)))

    这就是我遇到的所有问题,我不知道如何从我之前在服务器端的自定义操作中获取“this”。一旦你知道那是 hot_instance。其中 hot 是我的表的名称,我认为这很简单。

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 2021-04-26
      • 2020-04-05
      • 2019-04-04
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多