大佬教程收集整理的这篇文章主要介绍了javascript – 为什么rails不呈现.js.erb文件?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
messages_controller.rb
# GET /messages/new def new @message = message.new @users = User.where('id != ' + current_user.id.to_s) #if @message.save #messageMailer.new_message(@messagE).deliver respond_to do |format| format.html # new.html.erb format.js end #end end
<div class="row"> <div class="large-12 @R_673_8620@ns"> <div class="panel"> <h1>New message</h1> <%= render 'form' %> <%= link_to 'BACk',messages_path,:class => "button small" %> </div> </div> </div>
$("h1").html('Hello'); //for tesTing that it works
有什么东西我必须添加到另一个文件?是否有请求我必须加载HTML和.js?
我不认为你的方法是一种特别标准的方法来实现你想要的.你的JS模板没有被加载的原因是因为你的控制器被设置为响应HTML模板,如果浏览器请求HTML,以及JS模板,如果浏览器请求Js.它永远不会返回,因为浏览器只能请求其中一个.
换句话说,控制器中的respond_to块指示控制器如何响应不同类型内容的请求,而不是列出每个请求将要发送的所有类型的内容.
解决方案1:在每个页面上加载JS
这里有几件事需要考虑.首先,仅仅因为JS没有在特定页面上使用,本身并不是加载它的好理由. Rails,通过Sprockets,将所有JS连接并缩小为单个文件.只要此文件没有更改,它就会被用户的浏览器缓存.当您的用户访问需要此JS的页面时,这将导致更快的响应,因为它不需要为获取新JS而发出额外请求.
如果你担心你的JS运行在它不应该运行的内容上,那么你应该通过向页面或页面添加一个唯一的标识符来防止这种情况发生,然后检测你的标识符. Js.例如:
$("h1.special").html('Hello');
解决方案2:使用COntent_for
但是,在某些情况下,单独加载JS可能是有益的.在我看来,实现这一目标的最佳方法是,如果个人观点需要,可以使用块内容将内容附加到您的头上.
所以在你的应用程序布局中
#layouts/application.html.erb <head> #Other head content here <% if content_for?(:head) %> <%= yield(:head) %> <% end %> #Other head content here </head> #messages/new.html.erb <% content_for :head do $> <%= javascript_include_tag "messages_new.js" %> <% end %> #Other view stuff here #assets/messages_new.js $("h1").html('Hello');
然后,messages_new.js将仅包含并因此在包含该content_for块的视图上运行.它不应出现在任何其他页面上.
解决方案3:只需在您的html中包含javascript即可
或者,如果你不关心JS是否最后加载,那么你可以在New.html.erb的底部添加include Helper:
#messages/new.html.erb #Other view stuff here <%= javascript_include_tag "messages_new.js" %>
以上是大佬教程为你收集整理的javascript – 为什么rails不呈现.js.erb文件?全部内容,希望文章能够帮你解决javascript – 为什么rails不呈现.js.erb文件?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。