闪亮的时间选择器

Shiny timepicker

我想在我的 Shiny 应用程序中实现时间选择器和日期输入。但是,我没有设法创建合适的时间选择器。我尝试了不同的选项 - 使用 http://jdewit.github.io/bootstrap-timepicker/ 中的选项,但如果我将原始 html 包含在 includeHTML("file.html") 中,样式显示不正确,我只能看到一个小框。我下载了 Bower 包,更改了 HTML 中的路径,仍然没有。

这是我的闪亮代码:

shinyUI(bootstrapPage(
  titlePanel("Dates and date ranges"),

  column(4, wellPanel(


    dateRangeInput('dates',
                   label = 'Date range input: yyyy-mm-dd',
                   start = "2015-03-02", end = "2015-03-15",
                   weekstart = 1, language = "en"
    )

  )),

  column(6,
         verbatimTextOutput("dateRangeText"),
         plotOutput("distPlot", width = "100%")
  ),
  includeHTML("static.html")
))

还有我的HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link type="text/css" href="bower_components/bootstrap-timepicker/css/bootstrap.min.css" />
        <link type="text/css" href="bower_components/bootstrap-timepicker/css/bootstrap-timepicker.min.css" />
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript" src="bower_components/bootstrap-timepicker/js/bootstrap-2.2.2.min.js"></script>
        <script type="text/javascript" src="bower_components/bootstrap-timepicker/js/bootstrap-timepicker.min.js"></script>
    </head>
    <body>
        <div class="input-append bootstrap-timepicker">
            <input id="timepicker2" type="text" class="input-small">
            <span class="add-on">
                <i class="icon-time"></i>
            </span>
        </div>

        <script type="text/javascript">
            $('#timepicker2').timepicker({
                minuteStep: 1,
                template: 'modal',
                appendWidgetTo: 'body',
                showSeconds: true,
                showMeridian: false,
                defaultTime: false
            });
        </script>
    </body>
</html>

我不太确定我做错了什么,因为我是 JS 和 Web 的新手,有什么建议吗?或者您可以建议我以更简单的方式创建时间选择器。提前致谢!

此致, 鲍里斯

经过多次挠头,我开始工作了。我放弃了 tagsincludeHTML 方法,我发现这些方法更容易,而且我还根据自己的喜好构建了它,即将 js 分离到一个单独的文件中。

文件结构:

--|myApp
     --ui.R
     --server.R
     --|www
           --timepicker.js
           --|bootstrap-timepicker

我把这一切分开的原因是个人选择。如果您在 shinyApp 中放置一个名为 www 的文件夹,那么您可以从那里获取任何以 www 作为根文件夹的依赖项。我没有使用 bower 我只是从 bootstrap-timepicker git 页面下载了源 zip 文件夹。

文件

timepicker.js

$('#timepicker2').timepicker({
            minuteStep: 1,
            template: 'modal',
            appendWidgetTo: 'body',
            showSeconds: true,
            showMeridian: false,
            defaultTime: false
        });

ui.R

shinyUI(bootstrapPage(
  tags$head(
  tags$link(href="bootstrap-timepicker/css/bootstrap-timepicker.min.css", rel = "stylesheet"),
  tags$script(type="text/javascript", src="bootstrap-timepicker/js/bootstrap-timepicker.min.js")
  ),
  titlePanel("Dates and date ranges"),
  column(4, wellPanel(


    dateRangeInput('dates',
                   label = 'Date range input: yyyy-mm-dd',
                   start = "2015-03-02", end = NULL,
                   weekstart = 1, language = "en"
    )

  )),

  column(6,
         verbatimTextOutput("dateRangeText"),
         plotOutput("distPlot", width = "100%")
  ),
  tags$div(class = "input-group bootstrap-timepicker timepicker",
           tags$input(id = "timepicker2",
                      type = "text",
                      class = "form-control input-small"),
           tags$span(class = "input-group-addon",
                     tags$i(class= "glyphicon glyphicon-time"))),
  tags$script(src = "timepicker.js")
))

说明

如果您还没有探索 shiny 中的 tags,我推荐他们。非常强大,无需来源 HTML 文件。如果你只想看看他们做了什么,然后将 tags$script(src = "timepicker.js") 复制到你的 R 控制台,你将得到以下内容:

<script src="timepicker.js"></script> 

他们为您打造 HTML。

首先,两个 bootstrap-timepicker 文件是源文件并放置在 tags$head 中,这将使 shiny 将它们放入 HTML 文档的 head 中。

接下来,使用 tags$div 构建时间选择器的 div,然后最终获取 timepicker.js 文件。关于为什么我们最后获取 js 文件,请参阅 Should Jquery code go in header or footer?。我不是 js 专家,所以这就是我如何让它工作的。

我怀疑 includeHTML 不起作用的原因是它没有正确加载依赖项。