微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

右键单击上下文菜单以在 R

如何解决右键单击上下文菜单以在 R

我正在尝试从时间 https://visjs.github.io/vis-timeline 库中在 R 中的 timevis 包的时间线中添加一个新组。我想通过单击鼠标右键添加上下文菜单,并可以选择在时间轴中添加删除组。

if (interactive()) {
  library(shiny)
  library(timevis)
  library(htmlwidgets)
  library(data.table)
  
  rv <- reactiveValues()
  rv$df <- data.frame(
    id = "",start = Sys.Date(),content = "",group = "")
  
  rv$df2 <- data.frame(id = c(1,2),content = c("1","2")) ## This should be added with the contextmenu dynamically
  
  ui <- fluidPage(
    timevisOutput("appts"),div("Selected items:",textoutput("selected",inline = TRUE)),div("Visible window:",textoutput("window",DT::DTOutput("table")
  )
  
  server <- function(input,output) {
    output$appts <- renderTimevis(
      timevis(
        rv$df,groups = rv$df2,options = list(
          editable = TRUE,multiselect = TRUE,align = "center",minorLabels = FALSE,majorLabels = FALSE,onAdd = htmlwidgets::JS(
              'function(item,callback) {
                var end = new Date(item.start);
                item.content = "Rename me!<br/>" + item.content;
                item.end = end.setMonth( end.getMonth() + 1);
      callback(item);
    }'
            ),onRemove = htmlwidgets::JS(
              'function (item,callback) {
        var r = confirm("Press OK to remove or cancel");
        if (r == true) {
              txt = "You pressed OK!";
          callback(item); }
          else {
          txt = "You pressed Cancel!";
          callback(null);
          }
          }'
            ),onUpdate = htmlwidgets::JS(
              'function(item,callback) {
       item.content = prompt("Edit items text:",item.content);
    if (item.content != null) {
      callback(item); // send back adjusted item
    }
    else {
      callback(null); // cancel updating the item
    }
  }'
            )
          )
        )
      )
      
      output$selected <- renderText(paste(input$appts_selected,collapse = " "))
      
      output$window <- renderText(paste(
        input$appts_window[1],"to",input$appts_window[2]
      ))
      
      output[["table"]] <- DT::renderDT({
        DT::datatable(input$appts_data,editable = TRUE)
      })
  }
  shinyApp(ui,server)
}

这是双击item更改名称的reprex,点击X后删除提示,在timevis面板上双击添加item。

文档中提到了以下内容

上下文菜单

传递方法返回的属性对象

// 在时间轴内右键单击时触发。请注意,按顺序 为了防止上下文菜单出现,认行为 事件必须停止:

Timeline.getEventProperties(event).   
timeline.on('contextmenu',function (props) {
  alert('Right click!');
  props.event.preventDefault();
});

双击已经完成,但也许可以使用上下文菜单或在时间线左侧双击或使用一些键盘命令+鼠标。我对此完全没有异议,您的支持会很棒。

最好,

特奥

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?