Hoppa till innehåll

Översikt

Förra veckan var en intensiv vecka med examinationer och webbkomponenter. Ingen rast, ingen ro. Denna vecka tar du dig an en mycket viktig del när det kommer till programmering i JavaScript, händelsestyrd programmering! Veckans fyra artiklar går igenom hur webbläsaren kör din kod, hur du lyssnar på händelser, hur webbkomponenter tar emot och skickar händelser och hur du testar dem. Information om veckans upplägg annonseras löpande i kursens Zulip-kanal.

Tisdagen i kursvecka 11 var det första passet i läsperiod två, och den första kvarten ägnades åt 1DV025. Mats och Mikael gick igenom veckans tema, händelsestyrd programmering, och påminde om B1 på torsdag och omexaminationen av A2 på fredag. De avslutade med råd om hur du kan lägga upp veckan kring artiklarna och övningsuppgiften Bart Board.

16:15

Veckans teori finns samlad i fyra artiklar. Läs dem i ordning; varje artikel bygger på den föregående. Mellan den tredje och den fjärde följer du hur en komponent skickar data uppåt, steg för steg.

  1. Händelseloopen – huvudtråden, anropsstacken, task queue och loopen som binder ihop dem, varför sidan fryser och hur timers och web workers passar in.

  2. Händelser i DOM:en – att lyssna och sluta lyssna, händelseobjektet, händelsens väg genom trädet, delegering och skillnaden mellan preventDefault() och stopPropagation().

  3. Händelser i webbkomponenter – var en komponents lyssnare och timers hör hemma, händelser från shadow DOM och hur en komponent skickar data uppåt med egna händelser.

  4. Exemplet Klickräknaren – händelser fortsätter där klickräknaren från kursvecka 10 slutade. Du följer fem steg, ett per tagg, där <click-counter> skickar händelsen countchange och en enda lyssnare till slut hör alla räknare. Du ser varför reset() inte skickar någon händelse, när bubbles behövs och varför composed inte behövs. Exemplet avslutas med tester av händelsen.

  5. Att testa webbkomponenter – en orientering, utanför kursens ram, om komponenttester med Vitest i jsdom och i en riktig webbläsare, och om hur attribut, händelser, livscykeln och timers testas.

Under läsanvisningar hittar du veckans kapitel som ska läsas i kurslitteraturen. Planera upp och dela upp läsningen under veckan. Denna vecka har kursledningen kryddat med två externa föreläsningar!

Under Övningsuppgifter hittar du övningsuppgifter som det är lämpligt att du arbetar med under veckan.

PS. Övningsuppgiften innehåller en inspelad diskussion kring lösningen av övningsuppgiften. Missa inte att titta på den.

Inspelningarna från 2020 och 2021 tar upp samma stoff som artiklarna, men är delvis inaktuella. Bland annat läggs lyssnare i dem till på andra ställen än i kursens övningsuppgifter i dag. Artiklarna räcker, men vill du se genomgångarna i rörlig bild finns de kvar här. Sammanfattningar och presentationer till inspelningarna hittar du i samlingen av inspelningar för delkurs B.

Öppna videon på YouTube

1:42:50

Samtidighetsmodellen och eventdriven programmering: stacken, kön och händelseloopen, timers, lyssnare, delegering, propagation och web workers. Motsvarar artiklarna Händelseloopen och Händelser i DOM:en.

Öppna videon på YouTube

29:43

Webbkomponenter – händelser: lyssnare i livscykeln och egna händelser. Motsvarar artikeln Händelser i webbkomponenter.

Skicka gärna in frågor på förhand via formuläret som du når här:

Dags för kursens andra quiz-baserade examinationsuppgift. Läs mer om examinationsuppgift B1 här.

Även om du har en veckas teori kvar innan du kan ge dig an examinationsuppgift B2, kan det redan nu vara bra att läsa igenom uppgiften så att du vet vad som komma skall.

Här är ett antal frågor som du kan försöka besvara och diskutera tillsammans med din AI-assistent. Tveka inte att lyfta någon av frågorna till handledningen för att fortsätta diskussionen med lärare och studiekamrater.

  1. Vad gör händelseloopen? Varför kan en lång beräkning i en lyssnare få hela sidan att frysa, och vad kan du göra åt det?
  2. Varför skrivs A, C, B ut om B skrivs ut med setTimeout() och fördröjningen 0?
  3. Vad är skillnaden mellan event.target och event.currentTarget, och hur utnyttjar delegering den skillnaden?
  4. Vad är skillnaden mellan preventDefault() och stopPropagation()? Varför ska den senare användas sparsamt?
  5. Varför läggs en komponents lyssnare till i connectedCallback() och tas bort i disconnectedCallback()? Vad kan hända om en lyssnare på document aldrig tas bort?
  6. Hur skickar en komponent data uppåt till den som använder den? När behövs bubbles och composed på en egen händelse?
  7. Vad kan du testa i en komponent med jsdom, och vad kräver en riktig webbläsare? Hur testar du att en komponent skickar en händelse?

Här följer tips till hur du kan prioritera bland kursmaterialet för att komma igång med veckan.

  1. Läs veckans fyra artiklar i ordning. Inspelningarna är frivilliga, men de två externa föreläsningarna om händelseloopen under läsanvisningarna är väl värda att se.
  2. Om du har glömt vissa saker så kan du behöva gå tillbaka och fräscha upp din kunskap om webbkomponenter från kursvecka 10.
  3. Gör övningsuppgiften Bart Board. Den tränar precis det den tredje artikeln går igenom: lyssnare med ett AbortController, en timer som stoppas och en egen händelse. Det förbereder dig inför examinationsuppgift B2.
  4. Missa inte att titta på den inspelade föreläsningen som visar ett förslag på facit till veckans övningsuppgift. Du får se diskussion om webbkomponentens olika delar.
CCBY