Passiday / OOP-Cards

Library for card games
4 stars 8 forks source link

Ieviest vienkāršas notikumu (event) apstrādes klases #29

Closed Passiday closed 4 years ago

Passiday commented 4 years ago

Nodarbībā demonstrēju piemēru, kā var izmantot paštaisītiem DOM elementiem paredzētu notikumu apstrādes mehānismu. Es arī brīdināju, ka tas ir hack, ka izmantot iebūvētās EventTarget un CustomEvent klases nav laba prakse, ja runa ir par ne-DOM elementiem. Kā šajā gadījumā — spēles modelis CukasGame nav kas tāds, kam piemīt reprezentācija pārlūkprogrammas lapā.

Te ir šis koda paraugs:

class MyObject extends EventTarget {
  constructor(name) {
    super();
    this.name = name;
  }
  trigger(message) {
    const e = new CustomEvent('update', {detail: {message}});
    this.dispatchEvent(e);
  }
}

const o = new MyObject('Good Boy');

o.addEventListener('update', e => {
  console.log(e.type, 'type event by', e.currentTarget.name, 'was triggered, message:', e.detail.message);
});

o.trigger('Hello');

Uzdevums ir pagatavot alternatīvas klases EventTarget un CustomEvent, kurām tiktu ieviestas minimāli nepieciešamās metodes (vienmēr var vēlāk papildināt!), un kuras var tālāk izmantot CukasGame pārvēršanā par notikumus ģenerējošiem objektiem.

Ierosinu to visu glabāt failā vanillaEvent.js, un klases saukt VEventTarget un VEvent. Izmantojot jaunradītās klases, augstāk redzamajam koda piemēram būtu jāfunkcionē identiski:

Testēšanai vēlams izmantot vismaz divu dažādu tipu notikumus un vismaz divas dažādas notikumu apstrādes funkcijas.