Rails 引导选项卡。选项卡中的 Dropzone 不起作用

Posted

技术标签:

【中文标题】Rails 引导选项卡。选项卡中的 Dropzone 不起作用【英文标题】:Rails Bootstrap tabs. Dropzone in tabs doesn't work 【发布时间】:2018-05-16 10:22:52 【问题描述】:

我动态创建引导选项卡,每个选项卡都有一个partial

<ul class="nav nav-tabs" id="tabs-from-locales" role="tablist">

  <% @locales.each_with_index do |locale, i| %>
      <li class="nav-item">
        <a class="nav-link <%= 'active' if i == 0 %>"
           id="<%= locale.downcase %>-locale-tab"
           data-toggle="tab" href="#<%= locale.downcase %>"
           role="tab"
           aria-controls="<%= locale.downcase %>"
           aria-selected="true"><%= locale %></a>
      </li>

  <% end %>

</ul>

<div class="tab-content" id="tabs-from-locales-content">

  <%= @locales.each_with_index do |locale, i| %>
      <div
      class="tab-pane fade <%= 'show active' if i == 0 %>"
      id="<%= locale.downcase %>"
      role="tabpanel"
      aria-labelledby="<%= locale.downcase %>-tab"> A + <%= i %> <%= render 'form' %> </div>
  <% end %>

</div>

部分是一个form,它有另一个带有dropzone div的部分。

<%= form_with(:id => 'my-form', model: [:admin, @island], local: true, 

    html: id: 'myForm') do |f| %>

       ....
       ....

        <div class="form-group">
          <%= render partial: 'shared/dropzone', locals: upload_url: admin_pictures_path, thumbnail_urls: @thumbnail_urls %>
        </div>

        <%= f.submit class: 'btn btn-primary' %>

    <% end %>

dropzone 部分包含 dropzone 设置。

Dropzone 在第一个选项卡上正常工作,但在其他选项卡上它似乎没有被初始化并且fallback div 是可见的。

我有一个 js 文件,用于初始化和配置我的 dropzone 设置。

document.addEventListener("turbolinks:load", function () 
    if (document.getElementById('picture_dropzone')) 
        console.log("element found.")
        Dropzone.autoDiscover = false;
        // noinspection JSUnusedGlobalSymbols
        var pictureDropzone = new Dropzone('div#picture_dropzone', 

        ....
        ....
     

知道为什么dropzone 无法在其他选项卡上初始化吗?

【问题讨论】:

【参考方案1】:

您似乎正在使用 ID #picture_dropzone 搜索所有 dropzone 元素。当然,你只能让一个元素有一个特定的 ID;具有该 ID 的其他元素将被忽略。这就是为什么只有第一个 dropzone 被初始化而不是其余的。

如果您将一个类 (.picture_dropzone) 添加到您的 dropzone div,那么您可以搜索它,搜索将返回所有 dropzone div,而不仅仅是第一个。

【讨论】:

你能详细说明一下吗?一个代码 sn-p 会很好。我现在正在做$(".dropzone").each(function (i, index) Dropzone.autoDiscover = false; var pictureDropzone = new Dropzone('div#'+ this.id, ... ,但不幸的是我收到了一个错误Dropzone is already attached dropzone div 的 ID 是否唯一?除了new Dropzone('div#'+ this.id, ... 部分外,您的新代码 sn-p 看起来不错。如果 ID 都相同,那么它会一遍又一遍地尝试初始化第一个 dropzone div。

以上是关于Rails 引导选项卡。选项卡中的 Dropzone 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

rails timelinejs 未在引导选项卡中正确加载

引导选项卡中的数据表大小不正确

引导选项卡中的谷歌地图

在引导选项卡中选择 2 挤压下拉列表

引导选项卡:将 NGL 查看器加载到选项卡中

Select2 在引导选项卡中不起作用