use*_*808 2 haml coffeescript ruby-on-rails-3
在某些Rails视图中,我们具有javascript函数,这些函数可以异步加载某些数据以填充页面。我们的application.js文件将所有JavaScript加载到asset / javascripts文件夹中。
这是我们的haml视图之一:
:javascript
$(function() {
fetch_all_facebook_invitees();
});
Run Code Online (Sandbox Code Playgroud)
如果我们将fetch_all_facebook_invitees函数定义放在coffeescript文件中,则会在每个页面上加载它,因为它们已包含在应用程序的所有页面中:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
加载页面的JavaScript的最佳做法是什么?仅选择性地这样做而不加载整个树?
您可以通过内联渲染“部分”咖啡文件来解决此问题。
../assets/javascripts/inline/facebook_invites.js.coffee
确保在加载DOM时触发文件中的所有事件
$ ->
# do Facebook stuff
Run Code Online (Sandbox Code Playgroud)
facebook.haml:
= javascript_include_tag "inline/facebook_invites"
然后还有我用来制作控制器/查看特定Coffee文件的方法:
application.html.haml:
%body{ :data => { :controller => params[:controller], :action => params[:action]} }
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)