La séparation des préoccupations est la clé ici, et donc la liaison d'événement est la méthode généralement acceptée. C'est essentiellement ce que beaucoup de réponses existantes ont dit.
Cependant , ne jetez pas trop rapidement l'idée d'un balisage déclaratif. Il a sa place, et avec des cadres comme Angularjs, est la pièce maîtresse.
Il faut comprendre que l'ensemble a <div id="myDiv" onClick="divFunction()">Some Content</div>
été honteux si fortement parce qu'il a été abusé par certains développeurs. Il a donc atteint le point de proportions sacrilèges, un peu comme tables
. Certains développeurs évitent en faittables
les données tabulaires. C'est l'exemple parfait de personnes agissant sans comprendre.
Bien que j'aime l'idée de garder mon comportement séparé de mes opinions. Je ne vois aucun problème avec le balisage déclarant ce qu'il fait (pas comment il le fait, c'est un comportement). Il peut prendre la forme d'un attribut onClick réel ou d'un attribut personnalisé, un peu comme les composants javascript de bootstraps.
De cette façon, en regardant simplement le balisage, vous pouvez voir ce qui se passe, au lieu d'essayer d'inverser les classeurs d'événements javascript de recherche.
Donc, comme troisième alternative à ce qui précède, utiliser des attributs de données pour annoncer de manière déclarative le comportement au sein du balisage. Le comportement est gardé hors de la vue, mais en un coup d'œil, vous pouvez voir ce qui se passe.
Exemple d'amorçage:
<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>
Source: http://getbootstrap.com/javascript/#popovers
Remarque Le principal inconvénient du deuxième exemple est la pollution de l'espace de noms global. Cela peut être contourné en utilisant la troisième alternative ci-dessus, ou des cadres comme Angular et leurs attributs ng-click avec portée automatiquement.