ruby on rails 中的引导模式不起作用(不显示)

Posted

技术标签:

【中文标题】ruby on rails 中的引导模式不起作用(不显示)【英文标题】:Bootstrap modal in ruby on rails not working(not show up) 【发布时间】:2018-05-09 13:20:01 【问题描述】:

我正在使用 rail4 和 'bootstrap-sass':'3.3.6'。

我已按照https://coderwall.com/p/ej0mhg/open-a-rails-form-with-twitter-bootstrap-modals 中的步骤操作,并根据Bootstrap modal in ruby on rails not working 重写了部分内容。

部分:

<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Modal header</h3>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
      </div>
      <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

rails 控制台中没有错误。

来自 chrome 检查的响应似乎很好。

回复:

$("#myModal").find(".modal-content").html("<div aria-hidden=\'true\' aria-labelledby=\'myModalLabel\' class=\'modal fade\' id=\'myModal\' role=\'dialog\' tabindex=\'-1\'>\n<div class=\'modal-dialog\' role=\'document\'>\n<div class=\'modal-content\'>\n<div class=\'modal-header\'>\n<h3 id=\'myModalLabel\'>Modal header<\/h3>\n<\/div>\n<div class=\'modal-body\'>\n<p>One fine body…<\/p>\n<\/div>\n<div class=\'modal-footer\'>\n<button aria-hidden=\'true\' class=\'btn\' data-dismiss=\'modal\'>Close<\/button>\n<button class=\'btn btn-primary\'>Save changes<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n");
$("#myModal").modal('show');

但是模态框没有显示出来。

其他相关代码:

调用该操作的视图:

%li= link_to 'Add release', new_release_path,  :remote => true, 'data-toggle' =>  "modal", 'data-target' => '#myModal'

new_release.js.erb

$("#myModal").find(".modal-content").html("<%= j (render 'new_release') %>");
$("#myModal").modal('show');

路线:

get "new_release" => 'project#new_release', :as => :new_release

【问题讨论】:

【参考方案1】:

我猜当你尝试通过 new_release.js.erb 中的 javascript 渲染该模式时,

$("#myModal").find(".modal-content")

实际上它没有加载到 DOM 中,因为部分没有加载

因此,与其在您实际调用的模板文件中部分保留模型 div 标记,不如在您的内部添加整个模态,比如假设您的主模板是

index.html.erb

<%= link_to 'Add release', new_release_path, :remote => true %>

<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content"></div>
  </div>
</div>

在 js.erb 中

new_release.js.erb

$("#myModal").find(".modal-content").html("<%= j (render 'new_release') %>");
$("#myModal").modal('show');

_new_release.html.erb

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
    <button class="btn btn-primary">Save changes</button>
  </div>

希望这可行,谢谢

【讨论】:

是的。这行得通。这与我的解决方案几乎相同。顺便说一句,将 class="modal-dialog" 添加到 _new_release.html.erb 将有助于样式。【参考方案2】:

看下面的代码

$("#myModal").find(".modal-content").html("<div aria-hidden=\'true\' aria-labelledby=\'myModalLabel\' class=\'modal fade\' id=\'myModal\' role=\'dialog\' tabindex=\'-1\'>\n<div class=\'modal-dialog\' role=\'document\'>\n<div class=\'modal-content\'>\n<div class=\'modal-header\'>\n<h3 id=\'myModalLabel\'>Modal header<\/h3>\n<\/div>\n<div class=\'modal-body\'>\n<p>One fine body…<\/p>\n<\/div>\n<div class=\'modal-footer\'>\n<button aria-hidden=\'true\' class=\'btn\' data-dismiss=\'modal\'>Close<\/button>\n<button class=\'btn btn-primary\'>Save changes<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n");
$("#myModal").modal('show');

这意味着您尝试将一个以#myModal 元素开头的块嵌套在另一个#myModal 元素中。所以结果 HTML 将包含 2 个具有相同 ID 的元素。尝试先解决这个问题。

【讨论】:

感谢您的有用提示!我应该学习一些关于 jquery 的东西。【参考方案3】:

您应该使用$("#myModal").modal('show'); 打开模式。

【讨论】:

是的。现在响应包含 $("#modal-window").modal('show'); @makeapp 我也忽略了选择器。它应该是$("#myModal"),就像编辑后的答案一样。

以上是关于ruby on rails 中的引导模式不起作用(不显示)的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap (5) Javascript 在 package.json 修订后不起作用 (Ruby on Rails 6)

Ruby on Rails - AJAX 请求不起作用(跨域),尝试了一切

image_url 在动作邮件程序中不起作用(Ruby on rails)

如何让引导选项卡链接链接到 ruby​​ on rails 中的另一个部分文件以显示内容?

Ruby on Rails 中的社交媒体共享按钮

使用omniauth-twitter的Ruby on Rails应用程序在heroku上不起作用“很抱歉,出了点问题。”