Spec-Zone.ru › Ruby on Rails 7.0

класс ActionView::Template

Родитель:
Объект

Шаблон Action View Template

Отображаемый шаблон Action View Template для объектов, отвечающих на render_in

Атрибуты

формат[R]
frozen_string_literal[RW]
обработчик[R]
идентификатор[R]
локальные_переменные[R]
переменная[R]
вариант[R]
виртуальный_путь[R]

Публичные методы класса

новый(источник, идентификатор, обработчик, локальные_переменные:, формат: nil, вариант: nil, виртуальный_путь: nil) Показать исходный код
# File actionview/lib/action_view/template.rb, line 123
def initialize(source, identifier, handler, locals:, format: nil, variant: nil, virtual_path: nil)
  @source            = source
  @identifier        = identifier
  @handler           = handler
  @compiled          = false
  @locals            = locals
  @virtual_path      = virtual_path

  @variable = if @virtual_path
    base = @virtual_path.end_with?("/") ? "" : ::File.basename(@virtual_path)
    base =~ /\A_?(.*?)(?:\.\w+)*\z/
    $1.to_sym
  end

  @format            = format
  @variant           = variant
  @compile_mutex     = Mutex.new
end

Публичные методы экземпляра

кодировать!() Показать исходный код
# File actionview/lib/action_view/template.rb, line 189
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 171
def inspect
  "#<#{self.class.name} #{short_identifier} locals=#{@locals.inspect}>"
end
локальные_присваивания() Показать исходный код
# File actionview/lib/action_view/template.rb, line 103
eager_autoload do
  autoload :Error
  autoload :RawFile
  autoload :Renderable
  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"
отобразить(вид, локальные_переменные, буфер = ActionView::OutputBuffer.new, добавить_в_стек: true, &блок) Показать исходный код
# File actionview/lib/action_view/template.rb, line 154
def render(view, locals, buffer = ActionView::OutputBuffer.new, add_to_stack: true, &block)
  instrument_render_template do
    compile!(view)
    view._run(method_name, self, locals, buffer, add_to_stack: add_to_stack, &block)
  end
rescue => e
  handle_render_error(view, e)
end

Отобразить шаблон. Если шаблон ещё не был скомпилирован, это делается непосредственно перед рендерингом.

Этот метод инструментирован как “!render_template.action_view”. Обратите внимание, что мы используем восклицательный знак в этой инструментировке, потому что вы не хотите использовать это в продакшене. Это медленный только если за ним наблюдают.

короткое_имя() Показать исходный код
# File actionview/lib/action_view/template.rb, line 167
def short_identifier
  @short_identifier ||= defined?(Rails.root) ? identifier.delete_prefix("#{Rails.root}/") : identifier
end
источник() Показать исходный код
# File actionview/lib/action_view/template.rb, line 175
def source
  @source.to_s
end
поддерживает_потоковую_передачу?() Показать исходный код
# File actionview/lib/action_view/template.rb, line 144
def supports_streaming?
  handler.respond_to?(:supports_streaming?) && handler.supports_streaming?
end

Возвращает, поддерживает ли базовый обработчик потоковую передачу. Если да, при старте рендеринга может быть передан буфер потоковой передачи.

тип() Показать исходный код
# File actionview/lib/action_view/template.rb, line 163
def type
  @type ||= Types[format]
end

Приватные методы экземпляра

инструментировать(действие, &блок) Показать исходный код
# File actionview/lib/action_view/template.rb, line 356
def instrument(action, &block) # :doc:
  ActiveSupport::Notifications.instrument("#{action}.action_view", instrument_payload, &block)
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API