在我们的一些Rails视图中,我们有javascript函数,它们异步加载某些数据来填充页面。我们的application.js文件加载assets / javascripts文件夹中的所有javascript。
以下是我们的一个haml视图中的一点:
:javascript
$(function() {
fetch_all_facebook_invitees();
});
如果我们将fetch_all_facebook_invitees函数定义放在coffeescript文件中,它会在每个页面上加载,因为它们包含在应用程序的所有页面中:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
为页面加载javascript的最佳做法是什么?只选择性地执行它而不加载整个树?
答案 0 :(得分:5)
您可以通过内联呈现“部分”咖啡文件来解决此问题。
../assets/javascripts/inline/facebook_invites.js.coffee
确保在加载DOM时触发文件中的所有事件
$ ->
# do Facebook stuff
facebook.haml:
= javascript_include_tag "inline/facebook_invites"
然后还有我用来制作控制器/视图特定咖啡文件的方法:
application.html.haml:
%body{ :data => { :controller => params[:controller], :action => params[:action]} }
application.js.coffee:
$(document).ready ->
load_javascript($("body").data('controller'),$("body").data('action'))
load_javascript = (controller,action) ->
$.event.trigger "#{controller}.load"
$.event.trigger "#{action}_#{controller}.load"
facebook.js.coffee
$(document).bind 'edit_facebook.load', (e,obj) =>
# fire on edit facebook controller action
$(document).bind 'show_facebook.load', (e,obj) =>
# fire on show facebook controller action
$(document).bind 'facebook.load', (e,obj) =>
# fire on all facebook controller actions