You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 8-web-components/2-custom-elements/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,10 +11,10 @@ Possiamo definirli con delle classi speciali, ed usarli come se fossero sempre s
11
11
12
12
Gli elementi personalizzati si dividono in due categorie:
13
13
14
-
1.**Elementi personalizzati autonomi** -- elementi "nuovi di zecca", che estendono la casse astratta `HTMLElement`.
14
+
1.**Elementi personalizzati autonomi** -- elementi "nuovi di zecca", che estendono la classe astratta `HTMLElement`.
15
15
2.**Elementi built-in personalizzati** -- estendono gli elementi built-in, ad esempio un pulsante personalizzato, basato su `HTMLButtonElement` etc.
16
16
17
-
Prima di tutto, affrontiamo gli elementi autonomi, dopodiché ci spostiamo su quelli built-in personalizzati.
17
+
Prima di tutto, affrontiamo gli elementi autonomi, dopodiché ci sposteremo a quelli built-in personalizzati.
18
18
19
19
Per creare un elemento personalizzato, abbiamo bisogno di comunicare al browser una serie di dettagli relativi: come mostrarlo, cosa fare una volta che l'elemento viene aggiunto o rimosso dalla pagina, etc.
20
20
@@ -59,7 +59,7 @@ class MyElement extends HTMLElement {
59
59
Dopodiché, possiamo registrare l'elemento:
60
60
61
61
```js
62
-
// fa in modo che il browser sappia che <my-element> venga fornito dalla nostra classe
62
+
// fa in modo che il browser sappia che <my-element> viene fornito dalla nostra classe
63
63
customElements.define("my-element", MyElement);
64
64
```
65
65
@@ -137,7 +137,7 @@ Nell'esempio appena visto, il contenuto dell'elemento viene renderizzato (creato
137
137
138
138
Come mai non nel `constructor`?
139
139
140
-
Il motivo è semplice: quando viene chiamato `constructor`, è ancora troppo presto. L'elemento è stato creato, ma in questa fase, il browser non ha ancora processato/assegnato gli i vari attributi: in questo frangente, una chiamata a `getAttribute` restituirebbe `null`. Di conseguenza, non possiamo renderizzare proprio nulla in quel punto.
140
+
Il motivo è semplice: quando viene chiamato `constructor`, è ancora troppo presto. L'elemento è stato creato, ma in questa fase, il browser non ha ancora processato/assegnato i vari attributi: in questo frangente, una chiamata a `getAttribute` restituirebbe `null`. Di conseguenza, non possiamo renderizzare proprio nulla in quel punto.
141
141
142
142
Oltretutto, pensandoci attentamente, in termini di prestazioni, è una cosa saggia ritardare il lavoro fino al momento in cui non serva davvero.
1. La logica di rendering viene spostata sul metodo helper `render()`.
211
-
2. Possiamo chiamarlo una sola volta quando l'elemento viene inserito in pagina.
211
+
2. Possiamo chiamarlo una sola volta quando l'elemento viene inserito nella pagina.
212
212
3. Al cambio di un attributo, dentro la lista `observedAttributes()`, viene chiamato `attributeChangedCallback`.
213
213
4. ...e l'elemento viene renderizzato nuovamente.
214
214
5. Alla fine, possiamo creare un timer live.
@@ -241,11 +241,11 @@ customElements.define('user-info', class extends HTMLElement {
241
241
242
242
Eseguendolo, il contenuto dell'`alert` risulterebbe vuoto.
243
243
244
-
Questo è proprio perché in questa fase non ci sono figli, ed il DOM è ancora incompleto. Il parser ha collegato l'elemento custom `<user-info>`, e sta procedendo verso i suoi figli, ma nient'altro.
244
+
Questo proprio perché in questa fase non ci sono figli, ed il DOM è ancora incompleto. Il parser ha collegato l'elemento custom `<user-info>`, e sta procedendo verso i suoi figli, ma nient'altro.
245
245
246
246
Se volessimo inviare delle informazioni all'elemento, potremmo usare gli attributi, che sono subito disponibili.
247
247
248
-
Oppure, se davvero abbiamo necessità di avere a che fare con i figli, possiamo ritardarne impostare un `setTimeout` a latenza zero.
248
+
Oppure, se davvero abbiamo necessità di avere a che fare con i figli, possiamo ritardare l'accesso impostando un `setTimeout` a latenza zero.
249
249
250
250
Funziona così:
251
251
@@ -269,7 +269,7 @@ customElements.define('user-info', class extends HTMLElement {
269
269
270
270
Adesso l'`alert` alla riga `(*)` mostrerà "John", come se lo eseguissimo in modo asincrono, a parsing HTML completato. Possiamo processare i figli se necessario e terminare l'inizializzazione.
271
271
272
-
D'altra parte, la soluzione non è perfetta, perchè se anche i figli utilizzassero `setTimeout` per inizializzare sé stessi a loro volta, si metterebbero in coda: a quel punto prima verrebbe eseguito il `setTimeout` esterno, e poi quello interno.
272
+
D'altra parte, la soluzione non è perfetta, perché se anche i figli utilizzassero `setTimeout` per inizializzare sé stessi a loro volta, si metterebbero in coda: a quel punto prima verrebbe eseguito il `setTimeout` esterno, e poi quello interno.
273
273
274
274
E così non avremmo risolto granché, dato che di nuovo l'elemento esterno terminerebbe prima di quello interno.
275
275
@@ -305,7 +305,7 @@ Non c'è una una callback che si attiva dopo che gli elementi annidati sono pron
305
305
306
306
## Elementi built-in personlizzati
307
307
308
-
I nuovi elementi che creiamo, come `<time-formatted>`, non hanno una semantica associata. Sono del tutto sconosciuti per motori di ricerca, e dispositivi di accessibilità, che non possono quindi gestirli.
308
+
I nuovi elementi che creiamo, come `<time-formatted>`, non hanno una semantica associata. Sono del tutto sconosciuti per i motori di ricerca e i dispositivi di accessibilità, che non possono quindi gestirli.
309
309
310
310
Queste cose possono avere la loro rilevanza. Ad esempio al motore di ricerca potrebbe interessare sapere che un componente mostra l'orario. E se stiamo creando un particolare tipo di pulsante, perché non riutilizzare la funzionalità esistente di `<button>`?
311
311
@@ -319,7 +319,7 @@ Per esempio, i pulsanti sono una istanza di `HTMLButtonElement`, e possiamo part
319
319
classHelloButtonextendsHTMLButtonElement { /* metodi degli elementi personalizzati */ }
320
320
```
321
321
322
-
2. Forniamo il terzo argomenti a `customElements.define`, che specifica il tag:
322
+
2. Forniamo il terzo argomento a `customElements.define`, che specifica il tag:
0 commit comments