我越来越多地看到的一种现象是 Javascript 代码与特定页面上的特定元素相关联,而不是与各种元素或 UI 模式相关联。
例如,假设我们在一个页面上有几个动画菜单:
<ul id="top-navigation">
...
</ul>
<!-- ... -->
<ul id="product-list">
...
</ul>
这两个菜单可能存在于同一页面或不同页面上,并且某些页面可能没有任何菜单。
我经常会看到这样的 Javascript 代码(对于这些示例,我使用的是 jQuery):
$(document).ready(function() {
$('ul#top-navigation').dropdownMenu();
$('ul#product-selector').dropdownMenu();
});
注意到问题了吗?
Javascript 与 UI 模式的特定实例而不是 UI 模式本身紧密耦合。
现在这样做不是更简单(更清洁)吗?-
$(document).ready(function() {
$('ul.dropdown-menu').dropdownMenu();
});
然后我们可以将“下拉菜单”类放在我们的列表中,如下所示:
<ul id="top-navigation" class="dropdown-menu">
...
</ul>
<!-- ... -->
<ul id="product-list" class="dropdown-menu">
...
</ul>
这种做事方式将有以下好处:
- 更简单的 Javascript - 我们只需要在类上附加一次。
- 我们避免寻找给定页面上可能不存在的特定实例。
- 如果我们删除一个元素,我们不需要通过 Javascript 寻找该元素的附加代码。
我相信 alistpart.com 上的某些文章开创了类似的技术。
我很惊讶这些简单的技术仍然没有得到广泛采用,而且我仍然看到“最佳实践”代码示例和 Javascript 框架直接引用 UI 实例而不是 UI 模式。
这有什么原因吗?我刚才描述的技术是否有一些我不知道的大缺点?