Как передать атрибут от одного компонента к другому в EmberJS?

У меня есть компонент, у которого есть щелчок по тегу привязки, который открывает модальное окно, а внутри модели находится YouTube. Когда открывается модальное окно, я хочу, чтобы идентификатор в URL-адресе Youtube изменился, чтобы воспроизводить правильное видео, но мне сложно понять, как это сделать. Я добавил атрибуты данных с нужным мне идентификатором и хотел передать это в компонент, чтобы добавить его к URL-адресу. Я думал, что могу обновить идентификатор в файле JS компонента.

src = "https://www.youtube.com/embed/{{я бы}}?rel=0&showinfo=0"

Ниже представлены шаблоны Handlebars и JS.

{{#bs-modal-simple open=modal1 title = "Simple Dialog" size = "lg" position = "center" onHidden=(action (mut modal1) false)}}
  {{yt-ad-videos}}
{{/bs-modal-simple}}

JS:

import Component from '@ember/component';
export default Component.extend({
  click(evt){
    let ytId = evt.target.getAttribute('data-id');
    this.set('id', ytId);
  },
  id: null,
  actions: {
    openModal() {
      this.get('onOpen')();
    }
  }
});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
111
2

Ответы 2

гм, откуда вы берете данные? Этот код не имеет особого смысла:

click(evt){
  let ytId = evt.target.getAttribute('data-id');
  this.set('id', ytId);
},

где вы устанавливаете data-id?

Обычно вы называете свой компонент так:

{{my-component videoId = "TheId"}}

или пример с динамическими данными:

{{my-component videoId=model.youtubeId}}

Затем внутри my-component.hbs вы можете обернуть его в модальное окно и использовать videoId. Вы можете напрямую передать videoId другому компоненту.

<button onclick = {{action (mut modal1) true}}>Open</button>
{{#bs-modal-simple
  open=modal1
  title = "Simple Dialog"
  size = "lg"
  position = "center"
  onHidden=(action (mut modal1) false)
}}
  {{ember-youtube ytid=videoId}}
{{/bs-modal-simple}}

Здесь я использовал компонент Ember-youtube, потому что я не знаю, как реализован ваш yt-ad-videos. Вам нужно заглянуть внутрь, чтобы понять, как передать идентификатор.


Примечание: я рекомендую вам не использовать событие click() в теге компонента. Вместо этого используйте действие закрытия, как я сделал с <button>, чтобы открыть модальное окно.

У меня есть идентификаторы, жестко запрограммированные в тегах привязки, а модальный - от ember-bootstrap. data-attribute = "video is here" в одном компоненте, а затем добавление iFrame YouTube в модальное окно через другой компонент. Есть ли лучший подход к настройке?

ski760 30.07.2018 15:19

что именно вы имеете в виду под якорные теги? Вы, кажется, не совсем понимаете концепцию компонента. Возможно, также посетите канал #help Slack сообщества ember для обсуждения.

Lux 30.07.2018 15:58

Стандартный тег привязки. <a href = ""> текст </a> Я использую его для открытия модального окна. При щелчке по тексту открывается модальное окно. У меня есть модальное открытие, но мне нужно передать этот конкретный идентификатор, чтобы воспроизвести это конкретное видео. Имеет ли это смысл?

ski760 30.07.2018 16:04

Не совсем. вы можете предоставить трепетать?

Lux 30.07.2018 16:10

Я использую ember-bootstrap.com/#/components/modal, но вместо того, чтобы открывать его с помощью кнопки, я открываю модальное окно с помощью элемента тега привязки. Я добавляю свой YouTube iFrame в модальное окно. Я создал YouTube iFrame как собственный компонент, и при открытии модального окна необходимо воспроизвести другое видео в зависимости от того, какой элемент был нажат. т.е. <a href = "#" data-id = "some video id"> воспроизвести первое видео </a> или <a href = "#" data-id = "some video id"> воспроизвести второе видео </a> и т. д. Я хочу обновить идентификатор в URL-адресе YouTube, чтобы воспроизвести соответствующее видео.

ski760 30.07.2018 16:28

не делай этого. вы должны делать это тлеющим углем. постараюсь обеспечить минимальный тиддл и я постараюсь исправить.

Lux 30.07.2018 16:29

Взгляните на это. (Он не работает из-за вращающейся песочницы, но в реальном проекте он должен работать так)

Lux 30.07.2018 16:39

Только начал изучать Ember и работать над небольшим проектом, чтобы познакомиться. Я работал с индексным файлом, поэтому мне пришлось добавить контроллер. Добавление контроллера решило мою проблему. Спасибо за помощь.

ski760 30.07.2018 22:56

Добавление контроллера для индекса позволило мне передать необходимые данные и решить мою проблему.

Другие вопросы по теме