2016-04-21 5 views
1

Из того, что я понимаю, вызов render вернет ответ браузеру. Он может возвращать различные типы контента (html, json, js и т. Д.). Тем не менее, я немного смущен тому, что делает браузер после этого.Rails - Форматы и рендеринг - Как они работают?

Если ответ html, браузер просто отображает страницу. Если ответ json, как правило, код js клиента принимает ответ json и делает с ним что-то полезное. Если ответ js, что бы сделал браузер? Я не уверен, что этот js добавлен в документ и выполнен? Связано ли это с Rails UJS?

Также, как рендер связан с response_to? Используются ли они бок о бок или одни предпочитают друг друга?

render html: 
render js: 
render json: 

respond_to |format| do 
    format.html 
    format.js 
    format.json 
end 

Извините, если это может показаться большим количеством вопросов, но я думаю, что это помогло бы, если бы эти вопросы обсуждались вместе.

ответ

0

Если ответ js, что бы сделал браузер?

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

Я не уверен, что этот js прилагается к документу и выполняется? Связано ли это с Rails UJS?

UJS больше подходит для обеспечения того, чтобы приложение работало изящно, даже если браузер пользователей не обрабатывает javascript. Например, вы пишете свой скрипт, чтобы перехватить событие нажатия кнопки и отменить действие клика, вместо этого сделать что-то еще, например, вызов AJAX. Если у пользователя отключен javascript, этот перехват не произойдет. Поскольку вы написали js таким образом, произойдет нормальное действие нажатия кнопки. Оба случая должны быть обработаны, и оба должны работать - это ненавязчивое использование javascript.

Что касается присоединения к документу, не совсем то, что нет. Браузер получает кучу кода, и, если он в состоянии, он запускает этот код в контексте текущего документа. Он не сохраняет код в любом месте, когда он завершается, он отбрасывается, и документ остается в любом состоянии, которое оставил сценарий.

Как сделать рендер, связанный с response_to? Используются ли они бок о бок или одни предпочитают друг друга?

respond_to позволяет вам управлять тем, как вы отреагируете на пользователя, основываясь на своем запросе. В примере UJS выше это позволяет вам иметь один метод, который отвечает на запросы HTML и AJAX, но знает разницу и может внести любые изменения, которые он должен внести в свой ответ.

Пример:

respond_to |format| do 
    format.html # will by default render the view with this actions name 
    format.json do # lets pass back the object in json format 
    render @object.to_json 
    end 
end 

Это все предназначено как вводные ответы и довольно просты, я бы рекомендовал дальнейшее чтение по каждому предмету.

+0

Я действительно имел в виду рельсы/jquery-ujs и волшебство, которое приходит с ним. «Что касается добавления к документу, это не совсем так. Браузер получает кучу кода, и, если он способен, он запускает этот код в контексте текущего документа.Он не сохраняет код в любом месте, когда он завершается, он отбрасывается, и документ остается в любом состоянии, оставленном в скрипте ». - Могу ли я использовать функции, определенные в ответ js позже? Знаете ли вы, где я могу читайте об этой теме больше? (что браузер делает с ответом js) – maru

Смежные вопросы