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

rails 3.0.11 javascript_include_tag automatically includes an extra JS file

提问人:Jignesh Gohel 提问时间:5/18/2012 更新时间:5/24/2012 访问量:478

问:

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 被自动包含的原因是什么?

谢谢

吉涅什

ruby-on-rails-3 不显眼的javascript

评论

0赞 Salil 5/18/2012
您是否有包含其他 javascript 文件的布局?通常,布局将包括 application.js,而 application 又将包括放置其他 javascript 文件的树(目录)。
0赞 Jignesh Gohel 5/18/2012
@Salil - 是的,标头元素中有一个布局,其中包括以下内容:.但是 /javascripts/widgets/tooltip.js 不包含在任何地方,:d efaults 包括 jquery jquery_ujs jquery.prettyPhoto。我不明白从哪里包含它。<%= javascript_include_tag :defaults %>
0赞 Salil 5/20/2012
你能搜索你的插件,看看是否有任何插件正在设置config.action_view.javascript_expansions[:d efaults]。并查看它们都不在 after_initialize 钩子中,这可以覆盖 javascript 默认值的 application.rb 代码初始化。

答:

0赞 Jignesh Gohel 5/24/2012 #1

好的,我找到了答案。

以下是我的应用程序中包含的插件:

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。这些帮助我找到了上述答案。

谢谢 吉涅什