在我们的一些 Rails View 中,我们有 javascript 函数,可以异步加载某些数据以填充页面。我们的 application.js 文件加载 asset/javascripts 文件夹中的所有 javascript。
以下是我们的 haml View 中的一些内容:
:javascript
$(function() {
fetch_all_facebook_invitees();
});
如果我们将 fetch_all_facebook_invitees 函数定义放在 CoffeeScript 文件中,它会加载到每个页面上,因为它们包含在应用程序的所有页面中:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
为页面加载 javascript 的最佳实践是什么?只选择性地执行而不加载整个树?
最佳答案
您可以通过内联渲染“部分”咖啡文件来解决此问题。
../assets/javascripts/inline/facebook_invites.js.coffee
确保加载 DOM 时触发文件内的所有事件
$ ->
# do Facebook stuff
facebook.haml:
= javascript_include_tag“内联/facebook_invites”
然后还有我用来制作 Controller / View 特定 Coffee 文件的方法:
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
关于ruby-on-rails-3 - 在 Rails View 中触发 Coffeescript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288734/