【问题标题】:navbarMenu within navbarMenu in ShinyShiny中的navbarMenu中的navbarMenu
【发布时间】:2018-10-30 15:12:10
【问题描述】:

如果我在 Shiny 中使用以下 UI,我大致得到了我想要的输出,但它实际上并没有工作,因为最低级别的 navbarMenu 显示它的顶级标签和指示它可扩展但无法注册子的箭头项目。我的猜测是因为它被设计为仅作为顶级元素(navbarMenu)。我的问题是,是否还有另一个元素可以执行所需的子菜单任务?无法在菜单项下进行分组将很快变得视觉效率低下。

shinyUI(navbarPage("My Application",
                   tabPanel("Component 1"),
                   tabPanel("Component 2"),
                   navbarMenu("More",
                              tabPanel("Sub-Component A"),
                              tabPanel("Sub-Component B"),
                              navbarMenu("Yet More",
                                         tabPanel("Subpart 1"),
                                         tabPanel("Subpart 2"))
                              )
                   )
)

【问题讨论】:

  • 我认为,它没有显示,因为您没有内容。
  • 这只是一个显示行为的简单示例。我正在开发的有内容,但显示相同。

标签: r drop-down-menu shiny submenu


【解决方案1】:

这是一个很好的问题!

我认为没有其他元素可以使用,但您可以使用 JavaScript 使其工作。

我对@9​​87654323@ 所做的唯一更改是包含 js 文件,使用: includeScript("script.js")。真正的部分是脚本本身:我们定义了 2 个事件处理程序:

点击下拉菜单

下拉菜单由navbarMenu 创建。他们没有连接到tabPane,所以我们只需要通过切换下拉菜单来重新定义默认行为(关闭时打开,或者在打开状态下关闭)。

点击标签

点击标签时需要考虑 3 个子任务:

在 tabcontents 中设置活动元素

我们需要显示被点击的相应tabPane,以便查看内容。显示了带有class: active 的tabPane,因此首先,从每个tabPane 中删除active 类,然后为单击的选项卡添加active 类。

在导航栏中设置活动元素

同样,active 选项卡在 navbar 中以较深的灰色直观表示。

关闭所有下拉菜单

单击navbarMenu 中的特定选项卡后,关闭所有下拉菜单可能是个好主意,否则它们将保持打开状态。

script.js

$(document).ready(function(){
  $('.dropdown').on('click', function(e){
    $(this).toggleClass('open');
    
    e.stopPropagation();
    e.preventDefault();
  });
  
  $('[data-toggle=tab]').on('click', function(e){
    let dv = ($(this).attr('data-value'));
    
    //Set active element in tabcontents
    $('.tab-pane').removeClass('active');
    $('.tab-pane[data-value="' + dv + '"]').addClass('active');
    
    //Set active element in navbar
    $('a[data-toggle=tab]').parent().removeClass('active');
    $('a[data-value="' + dv + '"]').parent().addClass("active");
    
    //Close the dropdowns
    $('.dropdown').removeClass('open');
    
    e.stopPropagation();
    e.preventDefault();
  });
});

您可以通过runGist("https://gist.github.com/dgyurko/e1952c5ecbf9a1315b41b8d7ef1f7a8f")快速试用

确保在浏览器中进行测试,因为它在 RStudio 查看器中似乎无法正常工作!

演示

【讨论】:

  • 不错的解决方案。谢谢。
猜你喜欢
  • 2014-06-25
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
相关资源
最近更新 更多