这些 rails assets 标签助手是 ActionView 的一个子模块,ActionView::Helpers::AssetTagHelper
它提供了生成 HTML 的方法,这些 HTML 将视图链接到图片、javascript、样式表和提要等资产。
作为一个超类,这意味着 AssetTagHelpers 也将拥有modules
它class
irb(main):016:0> ActionView::Helpers::AssetTagHelper
=> ActionView::Helpers::AssetTagHelper
irb(main):017:0> ActionView::Helpers::AssetTagHelper.class
=> Module
irb(main):018:0> ActionView::Helpers::AssetTagHelper.class.superclass
=> Object
irb(main):019:0> ActionView::Helpers::AssetTagHelper.class.superclass.superclass
=> BasicObject
irb(main):020:0> ActionView::Helpers::AssetTagHelper.class.superclass.superclass.superclass
=> nil
注意:为简单起见,我将只关注 JavascriptIncludeTag,但它们都非常相似。
在这里,您将找到一个名为ActionView::Helpers::AssetTagHelper::JavascriptIncludeTag
你可以实例化哪个
JavascriptIncludeTag.new(config, asset_paths)
JavascriptIncludeTag 类有一个方法被调用asset_tag
,然后调用一个content_tag
方法并返回正确的标签。
路径:/actionpack/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb
require 'action_view/helpers/asset_tag_helpers/asset_include_tag'
# NOTE: on the 'action_view/helpers/asset_tag_helpers/asset_include_tag' it requires '/actionpack/lib/action_view/helpers/tag_helper.rb' so now all this files are connected :)
.
.
.
def asset_tag(source, options)
content_tag("script", "", { "src" => path_to_asset(source) }.merge(options))
end
路径:/actionpack/lib/action_view/helpers/tag_helper.rb
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
if block_given?
options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
content_tag_string(name, capture(&block), options, escape)
else
content_tag_string(name, content_or_options_with_block, options, escape)
end
end
因此,它们的工作方式就更少了。
注意:如果您发现我的解释有点棘手,请告诉我,我会进行编辑以提供更好的解释