Вставить вызов javascript внутри ‹body onLoad = function ()› в RAILS

Я n00b на рельсах. Вопрос очень простой, я хочу знать, как сделать вызов функции javascript внутри тега body в событии onLoad.

Я спрашиваю об этом, потому что в представлениях я не могу найти ни одного тега body или head (они как будто генерируются где-то еще).

Спасибо


person flyer88    schedule 26.11.2009    source источник


Ответы (3)


Вам не нужно изменять тег body, чтобы связать функцию Javascript с onload. Вместо использования атрибута onload в теле вы можете назначить функцию window.onload внутри внешнего файла Javascript.

Существуют более продвинутые способы, использующие прослушиватели событий для выполнения того же действия (запуск функции при загрузке страницы), которые позволили бы добавить несколько функций прослушивателя или триггерных функций в готовой DOM, немного / за некоторое время до загрузки страницы. Просто установка window.onload - самый простой способ, который сделает ваш Javascript ненавязчивым.

person Eric Bréchemier    schedule 26.11.2009

Тег body и head обычно определяется в одном из макетов. Макеты по умолчанию расположены в app/views/layouts.

person mtyaka    schedule 26.11.2009
comment
Я отметил теги head и body в файлах макетов, но ... какой макет связан с моим представлением ... Я имею в виду, что я не вижу отношения один к одному между макетами и представлениями. Как и где привязать макет с видом. Спасибо - person flyer88; 27.11.2009
comment
Существует хорошее руководство по Rails по этой теме (guides.rubyonrails.org/layouts_and_rendering.html). Я предлагаю вам проверить его, поскольку он объясняет всю магию макета / просмотра / частичного рендеринга. - person mtyaka; 27.11.2009

Эрик Брешемье и Мтяка правы.

Другой подход (если вам нужно добавить пользовательские элементы в верхний / нижний колонтитул, которые указаны для каждого представления, вы захотите сделать что-то подобное с блоками yield

Вот пример, позволяющий переопределить заголовок для каждой страницы, но тот же метод применяется к настройке тегов script в теге заголовка HTML.

app/views/layouts/posts_layout.html.erb

<html>
  <head>
    <title><%= yield(:page_title) || "My awesome site"%></title>
  </head>
  <body><%= yield %> </body>
</html>

app/views/posts/index.html.erb

<%= content_for :page_title, "post listing" %>
<h1>Here are your posts...</h1>
person madlep    schedule 27.11.2009
comment
Большое спасибо за ваш комментарий. Я читал о теге content_for. Очень интересно, но мне кажется, что я не могу таким образом добавлять атрибуты и события, не так ли? - person flyer88; 27.11.2009