D'accordo, chiamami custode della cripta per tutto il necro che faccio, ma non ho mai sentito che il vero valore di questo sia stato compreso correttamente. Storicamente, è stato affermato che "JavaScript discreto" o, mantenendo il tuo JS fuori dall'HTML tramite gli attributi del gestore di eventi HTML in linea e i tag di script che non si collegavano a un file il più possibile è un elemento chiave enorme di:
- Problemi di accessibilità
- SEO
- E miglioramento progressivo
BUGIE! (beh, ora lo sarebbero)
La verità della questione è che potresti fare JavaScript tecnicamente invadente e comunque tirare fuori i tre elementi precedenti. A meno che tu non stia creando dinamicamente contenuti HTML, il che è stato un grande no-no SEO nel corso della giornata.
Ma fermati e pensa ... a te!
In realtà, il grande vantaggio, la vittoria maggiore e più sottovalutata del mantenimento della separazione è sempre stato il vantaggio diretto che lo sviluppatore ne ricava. Puoi avere tutti i gestori di eventi che desideri sullo stesso elemento html per lo stesso evento che è conveniente. Ciò significa che se un tag con class="some_class"
ottiene sempre un determinato comportamento ma ottiene anche un comportamento bonus quando si trova all'interno di un id="bonus_behavior"
div, non dobbiamo iniziare a scherzare con la logica all'interno del nostro gestore di eventi con un permesso per ramificarlo. Possiamo semplicemente aggiungere o non aggiungere gestori a seconda del contesto.
Facile da leggere anche
Un altro vantaggio è la leggibilità. Questa era una preoccupazione più critica quando gli strumenti del browser consistevano nel messaggio di errore esclusivo di IE che ti diceva che c'era qualcosa di sbagliato [object]
ma IMO, è ancora un grosso problema. CSS qui, JS lì e HTML è il luogo in cui si incontrano sia loro che il server. Con tutte queste cose che si uniscono in un unico posto, ha senso fare affidamento sugli hook (ID, classi e gerarchia) per creare un livello di astrazione che ogni cosa utilizza per connettersi all'HTML.
IMO, più PUOI separare HTML, CSS e JS, più è facile non solo leggere ma anche modificare e capire cosa sta succedendo. Vedo un div vuoto con "dynamic_combo_box" come classe e ho una buona idea che qualcosa stia facendo una selezione elaborata che carica i dati in modo dinamico. Ho un indizio su come trovarlo in JS e CSS e se mi imbatto nella classe in quelle preoccupazioni, avrò una buona idea di cosa si tratta e come trovarlo nell'HTML.
Troppo facile da rendere ancora più sloppier
E naturalmente la leggibilità tende ad andare di pari passo con la manutenibilità. Quando fai semplicemente le cose scaricando tutto nei tag di script in cui si trova l'HTML pertinente, il più delle volte diventa più facile per le persone semplicemente tagliare e incollare quello script nell'HTML di un'altra pagina su cui stanno lavorando quando vogliono funzionalità simili, il che significa che ora hai una cosa che molto probabilmente alla fine diventerà due cose fastidiosamente simili ma non uguali al 100% il cui comportamento può diventare problematico nel tempo sfidando le aspettative e richiede l'aggiunta di ramificazioni più inutili per gestire le eccezioni di cui hai bisogno un altro no.
Pertanto, il comportamento di rigging di questi hook HTML incoraggia il riutilizzo del codice in modo intelligente. Se hai bisogno di ramificare il comportamento per un'implementazione alternativa, vai semplicemente alla stessa funzione e gestiscila lì con gerarchia HTML o forse un att-data che innesca un comportamento alternativo. È uno stop-shopping per chiunque voglia capire come funzionano gli elementi dell'interfaccia utente di un certo tipo e quei tipi di taglia e incolla spregevolmente pigri in un modo cattivo faranno la cosa giusta / più gestibile solo perché è la cosa più semplice da fallo ora ed è il modo migliore per far sì che la manutenibilità avvenga. Rendi la cosa più semplice da fare anche per qualcuno a cui non potrebbe importare di meno se per panico o apatia.
Ma per quanto riguarda il 2014?
Potrebbe essere un punto legittimo che nelle moderne applicazioni a pagina singola, alcune di queste cose pignole forse non dovrebbero essere confuse come dogmaticamente come sono state ma credetemi quando dico che non penso di essere l'unico che è stato venduto perché alla fine semplifica il lavoro. Sono pigro in un modo (spero) per lo più buono. Mi piace quando devo solo cambiare le cose in un posto per ottenere cambiamenti in tutta un'app, quando devo solo cercare in un posto per capire qual è il bug e quando faccio fatica a capire cosa diavolo è e come riutilizzare al meglio quel codice per fare qualcosa di molto simile.
È buono come dividere un DB o un livello dati è buono. Alla fine è un perché-non-ho-solo-fatto-quel risparmio di tempo come impiegare tutti e cinque i minuti a fare il bucato la sera prima piuttosto che spendere 10 minuti a far rabbrividire i tuoi pugili e condurre controlli paranoici sull'odore la mattina successiva.
Per me, sono quelle motivazioni egoistiche che sono sempre state il punto principale del motivo per cui mi aggrappo non solo alla JS discreta, ma alla separazione di stile / comportamento / contenuto il più possibile, anche se WHAT-freaking-WG fa del loro meglio confondere queste preoccupazioni in modi comprensibilmente fantastici e interessanti.
Ora che tutti stanno facendo SPA ed è quasi sciocco cercare di convincere gli affari che dovremmo preoccuparci delle persone che gestiscono senza JS (l'accessibilità può ora essere, presumibilmente, gestita con contenuti generati da JS), sembra che la prossima generazione di sviluppatori JS si preoccupi di meno su questo, ma IMO, c'è ancora una vittoria lì ed è principalmente per te, lo sviluppatore che scrive e mantiene queste cose. E davvero, quella vittoria avrebbe dovuto essere sempre il punto più sottolineato, ma non lo è mai stato per qualche motivo, perché alla fine avvantaggia te e il prodotto in caso di incidente felice grazie alla modifica / modifica / debug più facile.
Va mai bene?
Beh sì, immagino. In un'app usa e getta usa e getta per un concorso o qualcosa del genere. Ma lo farei comunque solo perché ne ho l'abitudine e in realtà non è più difficile da fare.