在Rails中实现逐页JavaScript的好方法是什么?
What is a good way of implementing per-page JavaScript in Rails?
在Ruby中尝试新事物-在每个页面上我都使用jquery做了非常丰富的东西。显然,如果我把所有的jquery都放到application.js中它会很快变得非常大
在最后惰性加载页面特定的js文件是一个好方法吗?如:
<script>
$(document).ready(function() {
$.getScript("/javascripts/this_pages_scripts.js");
});
</script>
有统一的方法来做这件事吗?我知道新的。js.erb等文件和ujs,但我仍然在谈论更多的页面特定的js -你知道,拖放初始化器,对话框创建器等。
我有两种方法:
对于那些只是添加一点视觉效果的小而琐碎的脚本,我通常将它们内联地包含在它们所修改的模板中(就像您所展示的那样),因为这样对我来说更容易跟踪。
对于任何超过一两行的东西,我保持它不引人注目,但使用content_for
我的应用程序布局看起来像这样(在HAML中):
= javascript_include_tag 'jquery.144.min','rails','jquery.tools','application'
= yield :scripts
重要的部分是yield :scripts
。然后在我需要一些javascript的页面,我做:
- content_for :scripts do
= javascript_include_tag 'photo_form'
这只在显示给定模板的情况下加载头文件中的javascript。content_for
向yield
方法发送具有相应名称的内容。
您可以在任何地方粘贴像这样的yield块—我在结束正文标记之前也有一个。Yield/content_for非常方便。
注意,正如tadman在评论中指出的,任何不需要加载在页面头部的内容都应该加载在页面末尾
最后要注意的是,如果你有更复杂的东西,你也可以在模板和应用程序视图之间使用实例变量。例如,我在应用程序布局中有一个菜单栏。因此,有时我想在某些页面上触发特定于上下文的按钮或附加的按钮行。
在我的应用程序布局中,我调用一个局部来呈现菜单,菜单代码看起来像:
#menubar (normal menu stuff)
- if @special_menu
#special_menu
那么,在任何模板中你都可以这样做:
- @special_menu = true
…对于该页面,将出现给定的菜单。你也可以在控制器操作中这样做,我有一个控制器,我在其中添加了一个before过滤器,将其中一个菜单标志设置为true。你可以对任何复杂的javascript内容做同样的事情,你可能想要有条件地包含。
这些想法大多是我从看这个铁路广播中得到的:http://railscasts.com/episodes/30-pretty-page-title
你应该看看!
设置一个符号来表示头文件中的文件名,并在控制器
中调用它@script = "prototype"
然后在视图中:
<%= javascript_include_tag @script %>
或加载多个
@scripts = ["prototype", "dropdown"]
然后<% @scripts.each do |s| %>
<%= javascript_include_tag s %>
<% end &>
我个人使用requireJS和一个自定义的特征检测库来处理这个问题。
然后我有一个单行包括requires脚本和它的data-main
属性在我的布局/主/共享视图页面。(我不熟悉rails这样,但它是相同的任何其他MVC)。
我在别的地方写了一个很好的答案。你也许能找到它
- 打破承诺链的好方法是什么
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- knex:根据结果创建数组的合适方法是什么
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 使用Modernizr检测移动设备最可靠的方法是什么
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 让会话值可用于JavaScript的好方法是什么
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么