作为jnr程序员,我第一次研究如何编写js代码,以便将其隔离到Rails应用程序中的某些页面。我认为,出于以下目的,这是明智之举。
a)我写的某些js我只想将单个页面上的某个元素作为目标,而不是同一控制器内其他页面上的其他元素作为目标(例如,使用类选择器并使用唯一的id标记每件事)看起来不太整洁。 (我看到Rails已经通过按控制器命名js文件来隔离控制器,但是将它们进一步划分为动作/页面名称js文件听起来也不好!)。
b)也许在找到仅在某些页面上运行js的解决方案时,可能意味着该js只需要在某些操作上加载,从而节省了加载时间。
这里有一个大家参与的方法,问题解答很多,但大多数答案都已经有6年了,而关于“ Garber Irish的Dom即刻执行的爱尔兰方法”的另一篇很好的帖子听起来很不错,但这又是相当不错的。现在已经很老了,而且都基于Rails 3 ...
因此,我不想创建重复的内容,而是想重新获得对同一问题的答案,并找出这些天是否存在最佳实践。
谢谢
最佳答案
惯例:
Rails在使用脚手架生成器时默认情况下会创建相应的
app / assets / javascripts / MODEL_NAME.coffee
应用/资产/样式表/MODEL_NAME.scss
通过“控制器”名称分隔JS和CSS逻辑
个人喜好:
与基于控制器的隔离不同,我更喜欢基于布局组件的隔离。最好通过下面的示例代码进行解释:
app / assets / javascripts / application.js
//= require_tree ./layouts/
应用/资产/ javascripts /布局/__shared.coffee
// WRITE GLOBAL JS LOGIC HERE FOR ANY LAYOUT
app / assets / javascripts / layouts / application / __ shared.coffee
// WRITE GLOBAL JS LOGIC HERE ONLY FOR THIS "application" LAYOUT
应用/资产/ javascripts /布局/博客/__shared.coffee
// WRITE GLOBAL JS LOGIC HERE ONLY FOR THIS "blog" LAYOUT IF YOU HAVE ANOTHER layout such as "layouts/blog.html.erb"
app / assets / javascripts / layouts / application / components / header.coffee
// WRITE JS code here for the header component
app / assets / javascripts / layouts / application / components / footer.coffee
// WRITE JS code here for the footer component
app / assets / javascripts / layouts / application / components / users / __ shared.coffee
// You can also divide a component into subcomponents just like this
// WRITE JS code shared amongst all users subcomponents
app / assets / javascripts / layouts / application / components / users / form.coffee
// WRITE JS CODE HERE regarding the form that creates or updates a User
app / assets / javascripts / layouts / application / components / users / list.coffee
// WRITE JS CODE HERE regarding the table listing all users
您还可以通过相同的方式构造CSS文件,以匹配组件