【问题标题】:Triggering Coffeescript Functions in Rails view在 Rails 视图中触发 Coffeescript 函数
【发布时间】:2012-01-07 11:49:11
【问题描述】:

在我们的一些 Rails 视图中,我们有 javascript 函数可以异步加载某些数据以填充页面。我们的 application.js 文件加载 assets/javascripts 文件夹中的所有 javascript。

这是我们的一个 haml 观点中的一点:

:javascript
  $(function() {
    fetch_all_facebook_invitees();
  });

如果我们将 fetch_all_facebook_invitees 函数定义放在一个咖啡脚本文件中,它会加载到每个页面上,因为它们包含在应用程序的所有页面中:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

为页面加载 javascript 的最佳做法是什么?只是有选择地这样做而不加载整个树?

【问题讨论】:

标签: ruby-on-rails-3 coffeescript haml


【解决方案1】:

您可以通过内联渲染“部分”咖啡文件来解决此问题。

../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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2014-02-13
    • 2014-06-12
    • 2014-10-02
    相关资源
    最近更新 更多