класс ActionView::Template
Action View Шаблон
Атрибуты
Публичные методы класса
# File actionview/lib/action_view/template.rb, line 14 def self.finalize_compiled_template_methods ActiveSupport::Deprecation.warn "ActionView::Template.finalize_compiled_template_methods is deprecated and has no effect" end
# File actionview/lib/action_view/template.rb, line 18 def self.finalize_compiled_template_methods=(_) ActiveSupport::Deprecation.warn "ActionView::Template.finalize_compiled_template_methods= is deprecated and has no effect" end
# File actionview/lib/action_view/template.rb, line 130
def initialize(source, identifier, handler, format: nil, variant: nil, locals: nil, virtual_path: nil, updated_at: nil)
unless locals
ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a locals parameter"
locals = []
end
@source = source
@identifier = identifier
@handler = handler
@compiled = false
@locals = locals
@virtual_path = virtual_path
@variable = if @virtual_path
base = @virtual_path[-1] == "/" ? "" : ::File.basename(@virtual_path)
base =~ /\A_?(.*?)(?:\.\w+)*\z/
$1.to_sym
end
if updated_at
ActiveSupport::Deprecation.warn "ActionView::Template#updated_at is deprecated"
@updated_at = updated_at
else
@updated_at = Time.now
end
@format = format
@variant = variant
@compile_mutex = Mutex.new
end Публичные методы экземпляра
# File actionview/lib/action_view/template.rb, line 217
def encode!
source = self.source
return source unless source.encoding == Encoding::BINARY
# Look for # encoding: *. If we find one, we'll encode the
# String in that encoding, otherwise, we'll use the
# default external encoding.
if source.sub!(/\A#{ENCODING_FLAG}/, "")
encoding = magic_encoding = $1
else
encoding = Encoding.default_external
end
# Tag the source with the default external encoding
# or the encoding specified in the file
source.force_encoding(encoding)
# If the user didn't specify an encoding, and the handler
# handles encodings, we simply pass the String as is to
# the handler (with the default_external tag)
if !magic_encoding && @handler.respond_to?(:handles_encoding?) && @handler.handles_encoding?
source
# Otherwise, if the String is valid in the encoding,
# encode immediately to default_internal. This means
# that if a handler doesn't handle encodings, it will
# always get Strings in the default_internal
elsif source.valid_encoding?
source.encode!
# Otherwise, since the String is invalid in the encoding
# specified, raise an exception
else
raise WrongEncodingError.new(source, encoding)
end
end Этот метод отвечает за правильную установку кодировки источника. До этого момента мы предполагаем, что источник — это данные в формате BINARY. Если нет дополнительной информации, мы предполагаем, что кодировка совпадает с Encoding.default_external.
Пользователь также может указать кодировку через комментарий в первой строке шаблона (# encoding: ИМЯ-КОДИРОВКИ). Это будет работать с любым движком шаблонов, так как мы обрабатываем комментарий кодировки перед передачей источника движку шаблонов, оставляя на его месте пустую строку.
# File actionview/lib/action_view/template.rb, line 165 def formats; Array(format); end
# File actionview/lib/action_view/template.rb, line 164 def formats=(_); end
# File actionview/lib/action_view/template.rb, line 199
def inspect
"#<#{self.class.name} #{short_identifier} locals=#{@locals.inspect}>"
end # File actionview/lib/action_view/template.rb, line 114 eager_autoload do autoload :Error autoload :RawFile autoload :Handlers autoload :HTML autoload :Inline autoload :Sources autoload :Text autoload :Types end
Возвращает хеш с определенными локальными переменными.
Предположим, такой рендеринг вложенного шаблона:
<%= render "shared/header", { headline: "Welcome", person: person } %> Вы можете использовать local_assigns во вложенных шаблонах для доступа к локальным переменным:
local_assigns[:headline] # => "Welcome"
# File actionview/lib/action_view/template.rb, line 163 def locals=(_); end
# File actionview/lib/action_view/template.rb, line 168 def refresh(_); self; end
# File actionview/lib/action_view/template.rb, line 182
def render(view, locals, buffer = ActionView::OutputBuffer.new, &block)
instrument_render_template do
compile!(view)
view._run(method_name, self, locals, buffer, &block)
end
rescue => e
handle_render_error(view, e)
end Отобразить шаблон. Если шаблон еще не был скомпилирован, это делается непосредственно перед рендерингом.
Этот метод проинструментирован как «!render_template.action_view». Заметьте, что мы используем восклицательный знак в этом инструментировании, потому что вы не хотите использовать его в производстве. Он медленный только если за ним наблюдают.
# File actionview/lib/action_view/template.rb, line 195
def short_identifier
@short_identifier ||= defined?(Rails.root) ? identifier.sub("#{Rails.root}/", "") : identifier
end # File actionview/lib/action_view/template.rb, line 203 def source @source.to_s end
# File actionview/lib/action_view/template.rb, line 172 def supports_streaming? handler.respond_to?(:supports_streaming?) && handler.supports_streaming? end
Возвращает, поддерживает ли обработчик потоковую передачу. Если да, при запуске рендеринга может быть передан буфер потоковой передачи.
# File actionview/lib/action_view/template.rb, line 191 def type @type ||= Types[format] end
# File actionview/lib/action_view/template.rb, line 167 def variants; [variant]; end
# File actionview/lib/action_view/template.rb, line 166 def variants=(_); end
# File actionview/lib/action_view/template.rb, line 162 def virtual_path=(_); end
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.