代码之家  ›  专栏  ›  技术社区  ›  Philip Perrin

DT包:styleColorbar()不适用于Android平板电脑

  •  0
  • Philip Perrin  · 技术社区  · 10 年前

    我开发了一个R shiny 应用程序使用优秀的 DT 包来处理数据表。其中一个表使用 styleColorbar helper函数,它在表格单元格中生成与每个单元格的值成比例的彩色条。

    这在运行Windows的Chrome和Firefox中运行得很好,但在运行Chrome或Sony Experia Android平板电脑的本地浏览器时,彩色条不会显示。

    在这里的演示网页上也是如此: https://rstudio.github.io/DT/functions.html . 所以我不认为这是我使用代码的特定问题。

    该函数基本上是一个JS包装器……我对JS一无所知。

    styleColorBar = function(data, color, angle=90) {
      rg = range(data, na.rm = TRUE, finite = TRUE)
      r1 = rg[1]; r2 = rg[2]; r = r2 - r1
      JS(sprintf(
        "isNaN(parseFloat(value)) || value <= %s ? '' : 'linear-gradient(%sdeg, transparent ' + (%s - value)/%s * 100 + '%%, %s ' + (%s - value)/%s * 100 + '%%)'",
      r1, angle, r2, r, color, r2, r
      ))
    }
    

    我在以下上下文中使用它:

    dat = DT::datatable(diversity,
          options = list(
            scrollX = TRUE, 
            scrollY = 400,
            autoWidth = TRUE,
            columnDefs = list(
              list(visible = FALSE, targets = hidden)
            )
          ),
          style = "bootstrap", 
          class = "table-striped table-compact", 
          extensions = c("FixedColumns"),
          )
           %>%
    formatStyle(
          c(1),
          background = styleColorBar(c(0,diversity[,1]), 'olivedrab'),
          backgroundSize = '99% 90%',
          backgroundRepeat = 'no-repeat',
          backgroundPosition = 'center'
        ) 
    

    有人能提出什么可能是错误的,以及在Android平台上工作的解决方案吗?

    编辑: 我认为这可能是线性梯度语法的问题,它与早期版本的Android存在兼容性问题。然而,我在Android 4.1平板电脑上测试了它,所以不确定问题是什么。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Philip Perrin    10 年前

    我在Github上提出了同样的问题,yihui的回答如下: https://github.com/rstudio/DT/issues/222 他认为这个问题可以通过使用 -webkit- 。其他在线信息也表明,这应该适用于较旧的Android系统。我会在这里发布他的代码以帮助他人:

    styleColorBar2 = function(...) {
      sub('linear-gradient', '-webkit-linear-gradient', styleColorBar(...))
    }
    

    我不确定如何从R中检测系统上运行的Android版本,但这是一个单独的问题。