В MVC как соединить событие через View и добавление в Module? Добрый день!
Собственно весь вопрос в заголовке, у меня есть кнопка написана через HTML, есть View и есть Module с пустым массивом, как через Controller я по клику могу добавить что либо в массив модуля, допустим вот моя View, которая возвращает число:export class View {
addItem() {
let plus = document.querySelector('.plus');
plus.addEventListener('click', () => {
let num = document.querySelector('.count').innerHTML;
return num;
})
}
}
Вот мой Модуль с функцией addNum, которая собственно и должна добавлять число в массив:export class Module {
constructor() {
this.num = [];
}
addNum(num){
this.num.push(num);
}
}
А вот Controller:class Controller {
constructor(view, module){
this.view = view;
this.module = module;
}
getNum(){
this.cart.addNum(this.view.addItem());
}
}
Проблема в том, что когда я вызываю функцию контроллера getNum, она срабатывает моментально, как мне дождаться какого либо события ?
Надеюсь все ясно объяснил, спасибо!

21 Авг 2019 в 07:00
194 +1
0
Ответы
1

Для того чтобы дождаться какого-либо события, вы можете использовать промисы или колбэки. В вашем случае, можно передать функцию обратного вызова в метод addItem() и вызвать эту функцию при событии 'click'.

Ниже пример, как вы можете изменить ваш код:

View:class View {
addItem(callback) {
let plus = document.querySelector('.plus');
plus.addEventListener('click', () => {
let num = document.querySelector('.count').innerHTML;
callback(num);
});
}
}

Controller:class Controller {
constructor(view, module){
this.view = view;
this.module = module;
this.view.addItem(this.getNum.bind(this));
}

getNum(num){
this.module.addNum(num);
}

}

Теперь при клике на кнопку с классом 'plus', будет вызываться метод getNum() контроллера, который добавит число в массив модуля.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир