关注点分离是这里的关键,因此事件绑定是普遍接受的方法。这基本上是许多现有答案所说的。
但是,不要太快放弃声明性标记的想法。它有它的位置,并且像 Angularjs 这样的框架是核心。
需要理解的<div id="myDiv" onClick="divFunction()">Some Content</div>
是,由于某些开发人员滥用了整体,因此受到了如此严重的羞辱。所以它达到了亵渎神明的程度,就像tables
. 一些开发人员实际上避免tables
使用表格数据。这是人们在不理解的情况下行事的完美例子。
虽然我喜欢将我的行为与我的观点分开的想法。我认为标记声明它的作用没有问题(不是它是如何做的,这就是行为)。它可能是实际的 onClick 属性或自定义属性的形式,很像引导 javascript 组件。
这样,只需看一眼标记,您就可以看到它做了什么,而不是尝试反向查找 javascript 事件绑定器。
因此,作为上述的第三种替代方法,使用数据属性以声明方式宣布标记内的行为。行为被排除在视图之外,但您一眼就能看到正在发生的事情。
引导示例:
<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>
来源: http: //getbootstrap.com/javascript/#popovers
注意第二个例子的主要缺点是全局命名空间的污染。这可以通过使用上面的第三种替代方案,或者像 Angular 这样的框架及其具有自动作用域的 ng-click 属性来规避。