Когда мне следует использовать контроллеры и маршруты в EmberJS?
Я знаю, что этот вопрос может показаться немного дублирующим, но другая версия этого вопроса устарела, и часть содержимого (например, "Виды") больше не является частью ember.
Я прохожу около 4 недель в качестве фронт-энда разработчика с EmberJS. Я до сих пор не понимаю, когда лучше использовать маршрут через контроллер или наоборот. Мне кажется, что каждое действие в маршруте также может быть использовано в контроллере.
Одна недавняя вещь, которую я услышал, была о том, что конечные маршруты должны быть без состояний, тогда как контроллеры должны быть с состоянием.
Каково текущее состояние контроллеров и маршрутов. Когда один должен быть использован поверх другого?
1 ответ
Рассмотрим следующий пример, чтобы понять состояние контроллера (или маршрута, или чего-либо еще) в простых терминах и в текущем контексте. Допустим, у вас есть страница (например, форма) с тремя вкладками; каждая вкладка может рассматриваться как состояние - она будет вызывать различные компоненты в зависимости от состояния (или вкладки, в которой вы находитесь). Теперь, если вам случится вернуться по какой-либо причине и снова нажать ссылку формы, вы увидите, что состояние останется прежним. (Если вы вернетесь к форме на вкладке 2, вернувшись к форме, вы все равно будете на вкладке 2).
Таким образом, чтобы поддерживать эти состояния, контроллеры - это путь, так как они являются одиночками. Маршрут потерял бы эту информацию и начал бы заново. Таким образом, в основном ваши переменные / объекты в контроллере будут определять "состояние".
Действия маршрута можно использовать так же легко, как действия контроллера - см. https://github.com/DockYard/ember-route-action-helper. Поэтому, если ваш шаблон для этого маршрута просто использует модель в качестве объекта напрямую, и вам не нужно поддерживать "состояние", вы можете в значительной степени обойтись без вашего контроллера.
Но если в вашем шаблоне используются переменные, которые требуют манипуляций, вам понадобится контроллер.
Надеюсь это поможет!