以前写网页都是一个页面功能载入对应的 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 }
#1 楼 @heylonj 谢谢,看了下 ruby china 的代码,懂了。
我再去看下 bitbucket 的 backbone 的代码组织,谢谢
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" )
参考 http://html5doctor.com/html5-custom-data-attributes/
#4 楼 @Peter 文章很好。 data 方法是jQuery提供的啊,长期使用还没遇过坑。
做好按需加载,全在一起没什么问题
另外给楼主一个另外提示,如何在相应页面也可以 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 %>