Установка события из класса
Добрый день!
Реализую простенький календарь под свои нужды. Сделал класс календаря, есть методы класса по отрисовки календаря в передаваемый снаружи div. Есть генерируемых стрелочки перехода на соседние месяцы. Есть метод перехода. Но как эти методы перехода привязать к кликам стрелочек изнутри класса? Мы ведь не знаем имени внешней переменной объекта созданного. Можно сделать класс-обертку и объект календаря сделать глобальным. Но это кажется не совсем правильным решением. Подскажите как правильно сделать функционал в этом случае? |
Какой класс вы имеете в виду? class в javascript?
Цитата:
|
Мы же не можем, например на div, навесить OnClick="this.nextMonth();", снаружи this не привязан ни к чему. Если делать обертку, то можно создать глобальный объект и уже оберткой привязать к событию globalCalendar.addEventListener("click", globalObject.nextMonth). А хочется к генерируемой DOM-разметке привязать внутренний метод.
|
Beer75, пока ты не начнешь делать тестовые примеры - дело не сдвинется с места.
Ты все про Фому... А тебе про Ерему. |
Цитата:
Хотя, не видя ваше класса и остального кода ничего сказать нельзя. |
Ок. Код. =о)
calendar.html ... <div id="myCalendar_div"></div> ... <script> function onLoad(){ myCalendar=new myCalendar(); myCalendar.renderCalendar('myCcalendar_div'); } </script> myCalendar.js class MyCalendar{ outputDiv=null; constructor(){ // вычисляем текущую дату, необходимые параметры } renderCalendar(oDiv){ this.outputDiv=document.querySelector("#"+oDiv); // вывод сетки календаря ... // вывод двух ссылок, на следующий месяц и предыдущий this.outputDiv.innerHTML=this.outputDiv.innerHTML+ '<span id="prevMonth">пред</span><span id="nextMonth">след</span>'; } nextMonth(){ // вычисляем необходимые параметры this.renderCalendar(); } prevMonth(){ // вычисляем необходимые параметры this.renderCalendar(); } } Вопрос: можно ли внутри функции renderCalendar повесить на span обработчики с вызовом nextMonth() и prevMonth()? Если ставить this.nextMonth(), то ошибка, естественно. А название переменной myCalendar, определяемой в onLoad() недоступно внутри класса. Или я что-то не так делаю в принципе? |
Цитата:
Вот только вся "логика" и ее реализация у тебя весьма неудачные... |
Beer75,если немного переделать твои фантазии
<div id="myCalendar_div"></div> <script> class MyCalendar { outputDiv = null; constructor(oDiv){ // вычисляем текущую дату, необходимые параметры this.outputDiv = document.querySelector("#"+oDiv); } renderCalendar(){ // вывод сетки календаря // вывод двух ссылок, на следующий месяц и предыдущий this.outputDiv.innerHTML = '<span id="prevMonth">пред</span> <span id="nextMonth">след</span>'; prevMonth.addEventListener('click', e => this.prevMonth()) nextMonth.addEventListener('click', e => this.nextMonth()) } nextMonth(){ alert('nextMonth') // вычисляем необходимые параметры this.renderCalendar(); } prevMonth(){ alert('prevMonth') // вычисляем необходимые параметры this.renderCalendar(); } } // function onLoad(){ const o = new MyCalendar('myCalendar_div'); o.renderCalendar(); } onLoad() </script> |
Цитата:
|
ksa, спасибо!
понял, в чем была моя ошибка. Пытался запихать обработчик в параметр тэга onClick="". Учусь, торможу. =о) |
Часовой пояс GMT +3, время: 22:38. |