Мне не нравится рендеринг JS для выполнения клиентом в качестве ответа на запрос XHR:
- Тип содержимого ответа — 99%
text/html
, но он отправляется какapplication/javascript
- Поведение в значительной степени общее: визуализация вместо существующего элемента, добавление или обновление флэш-сообщения, перенаправление страницы и т. д.
Вместо этого я отображаю либо HTML, либо JSON. Если тип содержимого ответа — HTML, предполагается замена. Вы можете оставаться ненавязчивым, добавив атрибут data-replacement-target
к любым элементам data-remote
, указав селектор запроса для замены ответом. В качестве альтернативы вы можете всегда оборачивать ответы в элемент, а затем смотреть на оболочку, чтобы определить цель замены.
Для перенаправлений или флэш-сообщений мне обычно проще отображать JSON. Обработчик ответа подхватывает его и выполняет необходимое действие, либо устанавливая window.location
, либо отображая новое флэш-сообщение на странице.
Результат: все JS моего приложения находится в соответствующей папке, никогда не распределяясь по представлениям.