我想包括这个,例如:
jQuery(document).ready(function($) {
$('#my-modal').modal(options)
});
在rails应用中的一个特定位置。在我的例子中,该文件名为views / modals / mymodal.html.erb。那里只有那里。
如果不将它放在所有页面上,我就无法弄明白如何做到这一点,如果我把它放在资产中就会发生。
答案 0 :(得分:6)
这些是一些有用的技巧
your.js
your.js
//= require_tree .
application.js
your.js
添加到资产预编译on config/application.rb
:config.assets.precompile += %w( your.js )
在mymodal.html.erb
将您的js脚本放入layout/yourlayout.html.erb
并使用if.. else..
逻辑。
示例:
<% if current_page?(yourspecific_path) %> <script language="text/javascript"> your javascript here .. </script> <% end %>
关于current_page?
或使用request.fullpath
获取当前的完整路径
示例:
<% if request.fullpath == yourspecific_path %> <script language="text/javascript"> your javascript here .. </script> <% end %>
关于request.fullpath
如果您希望将脚本放入文件.js
欢呼声
答案 1 :(得分:1)
其中一个解决方案是将我们的javascript插入到自己的文件中:Reference Link
例如:
// app / assets / javascripts / alert.js
alert("My example alert box.");
仅在我们希望它执行的视图中包含此文件:
<%# app/views/page/contact.html.erb %>
<%= javascript_include_tag "alert" %>
<h1>Contact</h1>
<p>This is the contact page</p>
不要忘记将新文件包含在要编译的文件列表中:
# config/environments/production.rb
config.assets.precompile += %w( alert.js )
答案 2 :(得分:1)
鉴于您要包含的JS文件名为my_modal.js
:
将放置在JS
中的assets/javascripts
个文件放在其中的某个目录中
assets/javascripts
,例如application
。
在//= require_tree .
中将行//= require_tree application
更改为application.js
(它会阻止在每个页面上加载my_modal.js
)。
将my_modal.js
放入assets/javasctripts
在my_modal.js
中将config.assets.precompile
添加到config assets.precompile += ['my_modal.js']
数组(application.rb
)。
将javascript_include_tag 'my_modal'
放在您希望包含此文件的视图中
您可以访问Rails guides作为参考。
答案 3 :(得分:1)
晚会,但对于今天观看此活动的任何人来说,我认为我已经提出了更好的建议。
有了这个,您可以编写如下代码:
class Post {
controller() {
// Runs on every action
}
index() {
// Runs on just the index action
}
}
Punchbox.on('Posts', Post);
(您也可以创建一个对象而不是一个类。请参阅文档)
我已经在这里更深入地写了这篇文章:https://kierancodes.com/blog/page-specific-javascript-in-rails-4
答案 4 :(得分:0)
jquery-readyselector是一个插件,&#34;扩展$().ready()
以便为特定于页面的脚本提供方便的语法&#34;
创建一些CSS类
<body class="<%= controller_name %> <%= action_name %>">
将您的JavaScript范围扩展到您的网页
$("#my-modal").ready(function() {
$('#my-modal').modal(options)
});