以前写网页都是一个页面功能载入对应的 js, 很散乱, 而且增加了 HTTP 的请求次数
合并成一个当然很好, 但是如何做到 one js file for multiple page 呢。
这种情况我个人是这样解决的,供参考: 在 layout 中
<body data-controller="<%= controller.controller_name %>" data-action="<%= controller.action_name %>">
在 js 中先判断
if ($('body').data('controller') == "yourController" && $('body').data('action') == "yourAction"){
//to do
}
data-behaviours='pickdate'
,绑定到 $(document).on 'click', '[data-behaviour~=pickdate]', -> pickdate
。<script>FileManager.init();</script>
#1 楼 @heylonj 谢谢,搜索了一下,发现很多好文章:
http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution http://techblog.treenodes.com/index.php/2012/04/19/organize-javascript-and-jquery-events-dom-ready-execution/
另外问一下,下面这种方式
$('body').data('controller')
是不是不如下面的稳妥呢?
body.getAttribute( "data-controller" )
另外给楼主一个另外提示,如何在相应页面也可以 include 该只有该页面自己所需的 js
如果是 Backbone 的话,建议使用 backbone marionette 的 Module 来组织代码
比如我的 upload.erb 需要用到 jcrop 和 backbone 的 User.Show Module 那可以在页面的末尾加入下面的代码
<% content_for :page_javascript do %>
<%= javascript_include_tag "jquery.jcrop" %>
<%= javascript_include_tag "users.show" %>
<% end %>
在 layout 中加入
<%= yield :page_javascript %>