1

我已经在 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();
                   }")))) })

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

太感谢了,

4

1 回答 1

0

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

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 是我的表的名称,我认为很容易。

于 2017-09-19T11:16:22.840 回答