rails 3.0.11 javascript_include_tag自动包含一个额外的JS文件

时间:2012-05-17 19:10:57

标签: ruby-on-rails-3 unobtrusive-javascript

Rails 3.0.11,Ruby 1.9.3

当我在视图文件中使用javascript_include_tag(“js / datepicker”)时 它包括2个文件。

<script src="/js/datepicker.js?1336410184" type="text/javascript"></script>
<script src="/javascripts/widgets/tooltip.js?1332959153" type="text/javascript"></script>

注意我没有指定的第二个,仍然包含它。

我有以下文件夹和文件:

/public/javascripts
/public/javascripts/widgets
/public/javascripts/widgets/tooltip.js

/public/js
/public/js/datepicker.js

我的应用程序使用Prototype和jQuery.datepicker.js实际上是Protoplasm Datepicker控件。

/config/application.rb

config.action_view.javascript_expansions[:defaults] = %w(jquery jquery_ujs jquery.prettyPhoto)

有人可以让我了解 /javascripts/widgets/tooltip.js 背后的原因是什么?

谢谢,

Jignesh

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。

以下是我的申请中包含的插件:

rails-widgets-jquery(http://github.com/paolodona/rails-widgets/wikis)

此插件名为 core.rb 的文件位于 rails-widgets-jquery / lib / widgets / core.rb

重新定义导致我的问题中提到的行为的javascript_include_tag。

下面的源代码:

module ActionView
 module Helpers
   module AssetTagHelper

  # We redefine javascript_include_tag in order to auto-magically include
  # the widgets javascripts. If you hame more than one javascript_include_tag
  # call, the widgets javascripts gets included only once.
  def javascript_include_tag_with_widgets(*sources)
    unless @__widgets_has_already_included_its_js
      options = sources.last.is_a?(Hash) ? sources.pop : {} # remove options
      sources << 'widgets/tooltip'
      sources << options # add previously removed option
      @__widgets_has_already_included_its_js = true
    end 
    javascript_include_tag_without_widgets(*sources)
  end
  alias_method_chain :javascript_include_tag, :widgets 
  end
 end
end

感谢@Salil的回复。这帮助我得到了上述答案。

谢谢, Jignesh