с помощью начальной загрузки с Ember 3.8 - PullRequest
0 голосов
/ 04 марта 2019

Мы начинаем с нового приложения, используя Ember 3.8 и bootstrap / SASS.Кажется, есть две надстройки, которые поддерживают начальную загрузку в Ember, ember-boostrap и ember-cli-bootrap-sassy .

Хотя первый реализует компоненты ember для большинства функций начальной загрузки, а также «заменяет» исходный bootstrap.js своей собственной реализацией, со вторым кажется, что я все еще могу использовать все оригинальные компоненты и реализации js,

С первого взгляда мне было бы намного удобнее с ember-cli-bootrap-sassy , поскольку я все еще мог использовать все примеры начальной загрузки из Интернета и иметь "настроенную" версиюиз bootstrap.js также кажется мне несколько нелогичным.Кроме того, что насчет всех возможностей начальной загрузки, которые не реализует ember-bootstrap, но я все еще требую?Кажется, что я мог бы закончить приложением, которое использовало бы ember-bootstrap, но дополнительно использовало все виды «обходных путей» для вещей, которые не были реализованы.

Поскольку у меня нет большого опыта в этой области, ябыл бы рад за некоторые рекомендации и идеи от экспертов.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Чтобы прояснить одно из соображений Саймона, Ember Bootstrap на самом деле не использует ни один из базовых javascript bootstrap.js для работы, поэтому вы потеряете эту зависимость.А поскольку для начальной загрузки (как минимум 4.0) требуется jQuery, вы привязаны к обоим.

С Ember-Bootstrap для работы требуется 0 дополнительных jquery (и работает в моем бесплатном приложении jQuery).

0 голосов
/ 05 марта 2019

Итак, прежде всего, отказ от ответственности: как автор ember-bootstrap, я, конечно, здесь немного предвзятый!;)

Но я думаю, что у меня есть веские аргументы в пользу ember-bootstrap, иначе я бы не вложил эту тонну работы.Таким образом, основной из них заключается в том, что он следует модели программирования Ember, в то время как использование bootstrap.js напрямую не делает и часто будет неуклюжим в приложении Ember:

  • Вы используете компоненты для рендеринга вещей, которыев свою очередь, визуализируйте тривиальную разметку, которую ожидает Bootstrap, вместо того, чтобы распространять статическую разметку Bootstrap по всему приложению
  • Компоненты в ember-bootstrap строго следуют так называемой модели программирования Data Down Actions up (DDAU) в Ember
  • это означает, что посредством декларативного назначения свойств, которые создают привязки данных, состояние вашего приложения «течет» через ваш пользовательский интерфейс, поэтому отображаемый DOM является прямой функцией вашего состояния.Это часть «Data down», которая отличается от необходимости «вызывать» вещи для достижения того же эффекта (например, $('#myModal').modal('show'))
  • Когда пользователь взаимодействует с вашим пользовательским интерфейсом, вызываются действия, которыеобрабатываются где-то вверх по дереву компонентов (например, в контроллере).Они преобразуют ваше состояние, которое используется для повторного обновления пользовательского интерфейса (однонаправленный поток данных)

Если это звучит слишком абстрактно, возьмите этот простой пример модального компонента.В ember-bootstrap вы должны сделать что-то вроде этого:

{{#bs-modal-simple
  open=this.showConfirmation
  title="Please confirm"
  onSubmit=(action "submit")
  onHidden=(action "close")
}}
  Some {{dynamic}} content.
{{/bs-modal-simple}}
  • Необходимая разметка Bootstrap отображается автоматически.Вы просто используете компонент и взаимодействуете с его общедоступным API (свойства и действия)
  • Отображение модального режима происходит путем установки состояния showConfirmation в true (или даже его автоматического вычисления с вычисляемым свойством),В bootstrap.js вам каким-то образом придется обязательно $('#myModal').modal('show')
  • , чтобы назначенные действия автоматически вызывались у вашего родителя (компонента или контроллера), когда происходят инициированные пользователем события.С bootstrap.js вы должны будете сначала присоединить слушатели событий в вашем JavaScript (а затем удалить их!): $('#myModal').on('hidden.bs.modal', function (e) { // do something }).
  • Это также требует ручного учета, в то время как компоненты имеют свои хуки жизненного цикла, так что вы можете просто распоряжаться ими в любое время (например, располагая их в блоке {{#if ...}} или изменяя маршруты).

Это основные пункты, с моей точки зрения, но есть и еще несколько:

  • ember-bootstrap прекрасно подходит для тестового слоя Ember.С bootstrap.js вы в какой-то момент столкнетесь с проблемами, например, код использует setTimeout() вызовы для обработки переходов, о которых помощники по тестированию Ember не знают, и поэтому не ждите.Но часто в тестах приходится полагаться на то, что ваше приложение находится в «установленном состоянии».ember-bootstrap вместо этого интегрируется в так называемый Run Loop Ember, так что такие вещи, как await click('#show-modal-button') просто работают (т.е. модал будет полностью видимым, когда Promise разрешится).
  • bootstrap.js требуется jQuery, тогда как ember-bootstrapне делает.

И еще одна вещь: все вышеперечисленное относится к компонентам Bootstrap, которым требуется JavaScript.Для статических компонентов, таких как значки, вы можете просто написать соответствующую разметку Bootstrap.На самом деле ember-bootstrap намеренно не предоставляет компоненты для этих тривиальных компонентов Bootstrap, чтобы не добавлять ненужные издержки.

...