Когда мы приступаем к части этого курса, посвященной JavaScript, я думаю, что стоит задуматься о том, что именно дает нам эта технология, чего не хватает в базовой версии Rails. Мы уже можем создавать довольно интересные сайты с помощью Rails… у нас есть постоянные данные, маршрутизация, динамические страницы, ссылки и кнопки, CSS… что еще нам нужно?

Фронтенд — интересная проблема — он менее прямолинеен, чем бэкенд, и требует другого мыслительного процесса. В то время как в бэкенде мы были преимущественно сосредоточены на том, к чему у пользователя есть доступ, фронтенд относится к тому, что они видят. Когда мы смотрим на стиль фреймворка MVC, JavaScript больше всего относится к представлению… это то, что пользователь видит и с чем взаимодействует. Если мы хотим сделать шаг в сторону от удобной простоты MVC, JS действует как контроллер для HTML/CSS. Там, где HTML — это схема базы данных, основа визуальных элементов, а CSS — это набор служебных объектов и методов, необходимых для организации данных и манипулирования ими по мере необходимости, JavaScript — это контроллер, интерпретирующий введенные пользователем данные и преобразующий их в визуальные изменения.

Все хорошо и красиво, но как-то по-философски. Так что же делает этот контроллер? Учитывая, что у нас уже есть HTML, обеспечивающий визуальную структуру и формы для ввода, и CSS, чтобы HTML выглядел красиво, какова реальная роль JavaScript на сайте? Приведите пример того, как он делает что-то, что вы не могли бы получить иначе?

Ну, если бы у меня были ответы на все вопросы, я бы не пошел на этот урок. Но я думаю, что могу дать некоторое представление. Его основная цель — изменить контент на странице без перезагрузки. Допустим, у вас есть веб-сайт, на котором отображаются страны, их Капитолий и их население. Единственная проблема в том, что стран очень много, и найти ту, которую вы ищете, может быть очень сложно. Итак, вы решили отсортировать по странам Африки.

В Rails это означало бы обновление страницы, сохранение данных, которые только что ввел пользователь, а затем, возможно, на этой странице или странице показа, демонстрацию отфильтрованных данных. Давайте будем честными, это заноза в заднице и не очень масштабируемое решение. Что делать, если у вас есть 5 фильтров? 50? Что, если пользователь решит добавить или удалить некоторые фильтры? Каждый раз страница должна перезагружаться, и Rails должен иметь дело с данными, что не идеально, поскольку он предназначен для обработки внутренних данных (предпочтительно только базы данных). Итак, как справиться с этой проблемой?

Ответ, конечно же, заключается в том, что JavaScript создан именно для такой ситуации.