La separazione delle preoccupazioni è la chiave qui, e quindi l'associazione di eventi è il metodo generalmente accettato. Questo è fondamentalmente ciò che molte delle risposte esistenti hanno detto.
Tuttavia , non buttare via l'idea del markup dichiarativo troppo rapidamente. Ha il suo posto, e con quadri come Angularjs, è il fulcro.
È necessario comprendere che il tutto è <div id="myDiv" onClick="divFunction()">Some Content</div>
stato vergognato così pesantemente perché è stato abusato da alcuni sviluppatori. Quindi ha raggiunto il punto di proporzioni sacrileghe, molto simili tables
. Alcuni sviluppatori in realtà evitano i tables
dati tabulari. È l'esempio perfetto di persone che agiscono senza capire.
Anche se mi piace l'idea di mantenere il mio comportamento separato dalle mie opinioni. Non vedo alcun problema con il markup che dichiara ciò che fa (non come lo fa, è un comportamento). Potrebbe essere sotto forma di un vero attributo onClick o di un attributo personalizzato, proprio come i componenti javascript di bootstrap.
In questo modo, guardando solo il markup, puoi vedere cosa fa, invece di provare a invertire i raccoglitori di eventi javascript di ricerca.
Pertanto, come terza alternativa a quanto sopra, utilizzare gli attributi dei dati per annunciare in modo dichiarativo il comportamento all'interno del markup. Il comportamento è tenuto fuori dalla vista, ma a prima vista puoi vedere cosa sta succedendo.
Esempio Bootstrap:
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Fonte: http://getbootstrap.com/javascript/#popovers
Nota Il principale svantaggio del secondo esempio è l'inquinamento dello spazio dei nomi globale. Ciò può essere aggirato utilizzando la terza alternativa sopra, oppure framework come Angular e i loro attributi ng-click con ambito automaticamente.