#javascript #model-view-controller #ruby-on-rails-3 #backbone.js #jammit
#javascript #модель-представление-контроллер #ruby-on-rails-3 #backbone.js #jammit
Вопрос:
Мне действительно не нравится иметь дублирующуюся структуру каталогов в общей папке для хранения шаблонов Javascript, как это предлагается здесь. Я собираюсь погрузиться в проект. Любой, кто может отговорить меня от добавления всех моих представлений JS в другие мои представления, пожалуйста, укажите причины, по которым этого не следует делать. Мои мысли:
Используете ли вы Backbone, шаблоны Jammit или любой другой Javascript для создания представления ваших данных, разве в идеале этот код не должен находиться в каталоге /app/views / [object]? Если мы разрабатываем приложение с несколькими способами представления данных, не должны ли все эти представления находиться в одном месте?
Конечно, нет смысла настраивать маршруты и заставлять rails обслуживать файлы, но если мы используем Jammit / Closure / другой инструмент сжатия JS, то мы уже добавили уровень обработки между нашей структурой каталогов и JS, который мы передаем клиенту. Не должно ли это означать, что мы можем размещать шаблоны там, где это имеет наибольший смысл для организации / сопровождения кода?
Спасибо.
Ответ №1:
Причина, по которой рекомендуется не помещать файлы .js в app/views/[object]
, заключается в том, что они не являются частью приложения Rails. На самом деле они являются частью магистрального приложения / фреймворка Jammit, поэтому им не место в каталоге приложений. Если файлы были файлами .js.erb, то они должны быть в каталоге app, но поскольку это не так, они принадлежат public/javascripts
каталогу.
Никто не мешает вам делать это, но поскольку они не являются файлами шаблонов .erb, они на самом деле не принадлежат каталогу приложения. Это общедоступные файлы .js. Причина, по которой они не являются частью основного приложения Rails, заключается в том, что они не заканчиваются на .erb и функционируют сами по себе, независимо от контроллеров или классов ruby, таких как изображения и css-файлы.
Имейте в виду, что если они находятся в каталоге / app / views, то их придется обслуживать через Rails. Другими словами, у вас должен быть сервер-контроллер для них, и это добавляет дополнительную сложность и нагрузку на ваши серверы. Более того, если они не требуют передачи данных ruby с ваших контроллеров в представления, у вас будет несколько довольно простых / бессмысленных контроллеров, которые просто обслуживают статические данные. И вам, вероятно, придется переименовать файлы в .js.erb, чтобы их можно было обслуживать через эти контроллеры. Если файлы передаются непосредственно из общедоступного каталога, в этом нет необходимости, так что все намного проще.
Нет ничего плохого в том, что один каталог отражает другой, это часто случается, например, со спецификациями RSpec /models, spec / views, spec / controllers.
Комментарии:
1. Конечно, существуют основные файлы фреймворка, но цель фреймворка — позволить вам создавать представления объектов вашего приложения на javascript. Разве они не должны быть частью приложения Rails?
2. Я обновил свой ответ дополнительной информацией, которая может помочь прояснить это.
3. Спасибо. Инструменты сжатия JS «скомпилируют» все JS из каталога rails в общедоступный каталог, поэтому нет необходимости создавать маршруты или добавлять .erb в файлы JS. Вероятно, меня просто нужно бить по голове этим последним предложением, пока оно не перестанет меня беспокоить 🙂
4. Это имеет смысл, но если файлы все равно будут перемещены в общедоступные, почему бы просто не сохранить их там в первую очередь? Опять же, вы всегда можете структурировать свои каталоги наиболее удобным для вас способом, если ваш метод последователен и остальные ваши товарищи по команде согласны с ним 🙂