0

导轨 3.0.11,红宝石 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自动包含的原因是什么?

谢谢,

吉涅什

4

1 回答 1

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 的回复。这些帮助我得到了以上答案。

谢谢,吉涅什

于 2012-05-23T21:33:07.837 回答