В 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, она срабатывает моментально, как мне дождаться какого либо события ? Надеюсь все ясно объяснил, спасибо!
Для того чтобы дождаться какого-либо события, вы можете использовать промисы или колбэки. В вашем случае, можно передать функцию обратного вызова в метод addItem() и вызвать эту функцию при событии 'click'.
Ниже пример, как вы можете изменить ваш код:
View:class View { addItem(callback) { let plus = document.querySelector('.plus'); plus.addEventListener('click', () => { let num = document.querySelector('.count').innerHTML; callback(num); }); } }
Для того чтобы дождаться какого-либо события, вы можете использовать промисы или колбэки. В вашем случае, можно передать функцию обратного вызова в метод 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 {
getNum(num){constructor(view, module){
this.view = view;
this.module = module;
this.view.addItem(this.getNum.bind(this));
}
this.module.addNum(num);
}
}
Теперь при клике на кнопку с классом 'plus', будет вызываться метод getNum() контроллера, который добавит число в массив модуля.