【问题标题】:Twitter Bootstrap Modal not working in RailsTwitter Bootstrap 模式在 Rails 中不起作用
【发布时间】:2014-09-16 08:09:00
【问题描述】:

Railstwitter bootstrap 我还是个新手。我正在研究一个模态,但我收到 "NoMethodError - undefined method 'render.'"

当我从my_release.js.erb 页面中删除("<%= escape_javascript(render 'project/new_release') %>" 代码时,它会消失,但不会出现任何窗口。

还有错误,它甚至不允许我的项目从初始索引页面加载,它引用了我的 views/layouts/application.html.erb 第 6 行,这是我的 <%= javascript_include_tag "application" %>

所以我假设我的 .js 完全不正常

我一直在研究我在下一页上看到的示例-https://coderwall.com/p/ej0mhg

我正在尝试将此模式示例添加到我的现有项目中。

以下是我的代码的一些 sn-ps 供参考:

宝石文件:

gem 'rails', '3.2.13'
gem 'bootstrap-sass', '2.3.2.1'
....
....
group :assets do
gem 'sass-rails', '~> 3.2.3'
end
....
....

应用程序.js

....
//= require bootstrap-modal
//= require bootstrap
....

Routes.rb

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

controller.rb

def new_release

respond_to do |format|

  format.html

  format.js

end

end

项目/index.html.erb

<div id="modal-window" class="modal hide fade" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true"></div>

<%= link_to 'Add release', new_release_path, {:remote => true,
'data-toggle'=> "modal", 'data-target' => '#modal-window'}  %>

项目/_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">

**here comes whatever you want to show!**

</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>

new_release.js.erb

$("#modal-window").html("<%= escape_javascript(render 'project/new_release') %>");

编辑评论 所以仍然没有弹出窗口......它会消失然后什么都没有。这与class="modal hide fade" 有关系吗?

【问题讨论】:

  • 您能发布完整的错误和日志吗?
  • 您的 new_release.js.erb 文件也在资产目录或视图中吗?您无法从资产目录访问渲染
  • 为什么要通过 ajax 添加模态内容?这是一个模态,所以它会被隐藏,而且在这里也很难调试。如果您使用相关代码提出单独的问题会更好

标签: javascript ruby-on-rails twitter-bootstrap modal-dialog


【解决方案1】:

刚刚读过那篇文章,它说

Now we need some javascript to make this works, make a file named same way as the controller action but with the suffix .js.erb for this example should be:

作者提到了文件名,却忘了告诉你js文件的路径。您的 js 文件路径将是 views/controller_name/new_release.js.erb 而不是 assets/javascript/new_release.js.erb

如果你看看你的控制器方法

def new_release
  respond_to do |format|
    format.html  #If it's a html request this line tell rails to look for new_release.html.erb in your views directory
    format.js #If it's a js request this line tell rails to look for new_release.js.erb in your views directory
  end
end

详情请查看Working with Javascript in Rails

【讨论】:

  • 啊,好吧,这更有意义。我认为渲染应该从控制器发生。
【解决方案2】:

将视图文件名从“_new_release.html.erb”更改为“new_release.html.erb”。我不知道你为什么在文件名前使用下划线。

如果它是部分而不是使用: ("'project/new_release')) %>"

【讨论】:

  • rails partial 是这样命名的
  • 渲染中有一个语法错误,它应该是render partial: 'project/new_release'render :partial=&gt; 'project/new_release'。另外render 'project/new_release'(由@twdeveloper 使用)只是呈现部分的一种不太冗长的方式
  • @Mandeep 所以我的项目现在没有错误了。但是,当我单击弹出窗口的链接时,它会消失然后什么都没有。我确实看到页面上出现了一条线,几乎就像表格的开头一样。我尝试从课堂上删除hide,意识到我的Application.js 中有BootstrapBootstrap-Modal,所以删除了Modal,仍然没有运气。甚至在我的 div 类中添加了 modal-dialogmodal-content。有什么建议/想法吗?
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2013-03-06
  • 1970-01-01
  • 2016-01-22
相关资源
最近更新 更多