【问题标题】:Bootstrap 4 pill tabs won't load content -- Rails 4Bootstrap 4 药丸标签不会加载内容——Rails 4
【发布时间】:2019-01-31 10:14:07
【问题描述】:

我目前正在尝试使用引导程序 4 选项卡/药丸导航在 3 个单独的选项卡中加载部分内容。选项卡本身未激活,仅使用默认值。最后,单击按钮时是否可以 AJAX 刷新部分?

 <ul class="nav nav-pills mb-3" id="myTab" role="tablist">
        <li class="nav-item pill-1">
          <a class="nav-link active bttn-simple bttn-md" id="pills-movies-tab" data-toggle="pill" href="#pills-movies" role="tab" aria-controls="pills-movies" aria-selected="true">Popular Movies</a>
        </li>
        <li class="nav-item pill-2">
          <a class="nav-link bttn-simple bttn-md" id="pills-photo-tab" data-toggle="pill" href="#pills-photos" role="tab" aria-controls="pills-photos" aria-selected="false">Photos</a>
        </li>
        <li class="nav-item pill-3">
          <a class="nav-link bttn-simple bttn-md" id="pills-feature-tab" data-toggle="pill" href="#pills-features" role="tab" aria-controls="pills-features" aria-selected="false">Features</a>
        </li>
      </ul>
    </div>

    <div class="container">
      <div class="row">
        <div class="col-md-9">
          <div class="tab-content" id="pills-tabContent">
            <div class="tab-pane fade show active" id="pills-movies" role="tabpanel" aria-labelledby="pills-movie-tab">
                <%= render @movies %>
              <%= paginate @movies %>
            </div>
            <div class="tab-pane fade" id="pills-photos" role="tabpanel" aria-labelledby="pills-photo-tab">
              <%= render @photos %>
              <%= paginate @photos %>
              <p>Hi Tab 2</p>
            </div>
            <div class="tab-pane fade" id="pills-features" role="tabpanel" aria-labelledby="pills-feature-tab">
              <%= render @features %>
              <%= paginate @features %>
              <p>Hi Tab 3</p>
            </div>
          </div>
        </div>

更新: 我添加了应该激活下面标签的点击事件

<script type="application/javascript">
    $(document).on('turbolinks:load', function () {
        $('#myTab a').on('click', function (e) {
            e.preventDefault()
            $(this).tab('show')
        });
    });
</script>

【问题讨论】:

    标签: ruby-on-rails ajax bootstrap-4


    【解决方案1】:

    您可以通过 AJAX 向您的控制器发送请求,然后在此选项卡中替换 html 数据。

    类似这样的:

    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        e.preventDefault();
        var type = $(this).data('type');
        $.ajax({
          data: { type: type },
          url: window.location.pathname,
          success: function(data){
            $("#" + type).html(data.html);
          }
        });
    

    控制器:

    def index
      respond_to do |format|
        format.html { ... }
        format.json { 
          type = params[:type]
          records = type.camelize.constantize.all
    
          render json: { 
            html: render_to_string(partial: "#{type.pluralize}",
                                   layout: false,
                                   formats: [:html],
                                   locals: { records: records })
          }
         }                                                    
      end
    end
    

    【讨论】:

    • 这是为 bootstrap 4 选项卡加载部分的唯一方法吗?默认只有 HTML??
    • 它似乎只默认使用选项卡窗格。我将对其进行风格化并继续前进。谢谢。
    • 您可以在用户打开页面时加载所有数据 -> 只需在选项卡之间切换(此时已呈现所有部分)或者您可以在每次用户切换时通过 AJAX 加载特定选项卡的数据。也许我不太明白你的问题。你的意思是当你点击它时那个标签不显示?或者选项卡在没有任何渲染数据的情况下显示?
    • 我正在做的是在标签按钮按下时加载部分。不知道哪个更有效率。页面呈现时全部加载或使用 AJAX 按钮点击加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多