Просмотры против компонентов в Ember.js

Я изучаю ember.js, и я пытаюсь понять разницу между представлением и компонентом. Я вижу оба способа создания повторно используемых компонентов.

От веб-сайта Ember по просмотрам:

Представления в Ember.js обычно создаются только по следующим причинам:
-Когда вам требуется сложная обработка пользовательских событий
-Когда вы хотите создать повторно используемый компонент

С сайта Ember по компонентам:

Компонент представляет собой пользовательский тег HTML, поведение которого вы реализуете с помощью JavaScript и внешний вид которого вы описываете с помощью шаблонов Handlebars. Они позволяют создавать многоразовые элементы управления, которые упрощают ваши шаблоны приложений.

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

Ответ 1

Ember.View

Ember.View в настоящее время ограничивается тегами, которые создаются для вас W3C. Но если вы хотели бы определить свои собственные теги HTML-приложений, а затем реализовать их поведение с помощью JavaScript? Вы не можете сделать это с помощью Ember.View.

Ember.Component

Именно то, что компоненты позволяют вам делать. На самом деле, такая хорошая идея, что W3C в настоящее время работает над спецификацией Custom Elements.

Углубленная реализация компонентов пытается как можно ближе к спецификации веб-компонентов. Когда Пользовательские элементы широко доступны в браузерах, вы должны легко переносить свои компоненты Ember на стандарт W3C и использовать их для использования другие рамки, а также принявшие новый стандарт.

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

Также важно отметить, что Ember.Component на самом деле Ember.View (подкласс), но это полностью изолировано. Доступ к свойствам в его шаблонах переходит к объекту view, а действия также нацелены на объект view. Нет доступа к окружению context или external controller вся контекстная информация передается в, что не соответствует Ember.View, который действительно имеет доступ к нему, окружающему контроллер, например, внутри представления вы можете сделать что-то вроде this.get('controller'), которое даст вам контроллер, который в настоящее время связан с представлением.

Итак, в чем основное отличие между представлением и компонентом?

Итак, основное отличие, помимо того, что компоненты позволяют создавать собственные теги и в какой-то момент в будущем, когда Пользовательские элементы доступны также переносить/использовать эти компоненты в других рамках, которые будут поддерживать настраиваемые элементы, действительно, в какой-то момент компонент ember сделает вид несколько устаревшим в зависимости от конкретного случая реализации.

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

Следуя вышеизложенному, это явно зависит от ваших вариантов использования. Но, как правило, если вам нужен доступ к нему вокруг контроллера и т.д., Используйте Ember.View, но если вы хотите изолировать представление и пройти только в информации, которую он должен работать, делая его контекстно-агностическим и гораздо более многоразовым, используйте Ember.Component.

Надеюсь, что это поможет.

Update

С публикацией Road to Ember 2.0 теперь вам предлагается использовать Компоненты вместо представлений в большинстве случаев.

Ответ 2

Ответ прост: использовать компоненты

Согласно учебному видеоролику, записанному в августе 2013 года, Иегуда Кац и Том Дейл (члены команды Ember Core) сказали аудитории не использовать представления, если вы не разработчик фреймворка. Они внесли много улучшений в Handlebars и внедрили компоненты, поэтому представления больше не нужны. Представления используются внутри, чтобы использовать такие вещи, как {{#if}} и ​​{{outlet}}.

Компоненты также тесно сопоставляют стандарт веб-компонентов, который будет встроен в браузер, поэтому есть много побочных преимуществ для удобного создания компонентов Ember.

Обновление 2014-11-27

Теперь еще важнее использовать компоненты вместо представлений, поскольку Ember 2.0 будет использовать Routable Components при вводе маршрута вместо контроллера/представления. Чтобы будущие доказательства вашего приложения, лучше избегать просмотра.

Источники:

Ответ 3

В настоящее время - v2.x является текущим стабильным выпуском - представления полностью устарели. Говорят, что представления удаляются из Ember 2.0 API.

Итак, использование ключевого слова {{view}} в Ember 2.0 вызовет утверждение:

Утверждение не выполнено: использование {{view}} или любой путь на нем был удален в Ember 2.0

Если вам нужно использовать представления в Ember 2.0, вы можете использовать ember-legacy-views аддон, который будет совместим с Ember до версии 2.4.

Итак, чтобы подвести итог - компоненты представляют собой (снятые виды) и будущее - они также будут заменять контроллеры. См. Маршрутизируемые компоненты RFC.