有人可以向我解释一下闭包是如何以更用户友好的形式工作的吗?它的帮助和文档真的让我无处可去。您如何执行一个简单的任务,例如选择和修改 dom(例如选择页面上的所有内容并隐藏它们)?
2 回答
请参阅http://derekslager.com/blog/posts/2010/06/google-closure-introduction.ashx,比较 #4,
隐藏所有div
的:
<html>
<head>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js" type="text/javascript"></script>
<script language="JavaScript">
goog.require('goog.dom.query');
goog.require('goog.style');
</script>
<script>
function HideElement(selector) {
goog.array.map(goog.dom.query(selector, null), function(e) {
goog.style.showElement(e, false);
});
}
</script>
</head>
<body>
<div>div</div>
<p>paragraph</p>
<div>another div</div>
<input type="button" value="hide" onclick="HideElement('div');"/>
</body>
</html>
但是,无法帮助您进行用户友好的细分。
一开始我认为 API 文档真的很棒,但是在编写了几百行代码之后,我遇到了各种各样的怪癖和问题。例如,dom 模块文档没有明确的入口点来发现 dom 操作方法 -> 所有顶级链接都是指向它在内部使用的帮助对象。如果在包引用列表中单击 dom,然后单击 DomHelper,您可以找到一些有用的方法。不过,您似乎需要实例化 DomHelper 才能访问这些工具?
幸运的是,他们确实在整个 API 文档的代码中都包含了方便的链接。如果您在 DomHelper 源代码中四处寻找,您会发现大多数列出的方法都可以直接从 goog.dom 命名空间获得!
我的另一个主要抱怨是文档通常不列出参数类型/名称/描述。例如,如果您展开 goog.dom.DomHelper.contains 它不会列出任何参数,但代码正确地注释了两个参数。我不敢相信他们制作了如此详尽的注释和文档库,然后未能将这些信息包含在(生成的)文档中!尽管在浏览他们的代码时,您也经常会在他们的注释中发现简洁且无意义的注释。
所以,总结一下:阅读代码!我总是讨厌听到这个答案,但这似乎是目前最好的选择。
我也有 O'Reilly Closure 这本书,虽然它确实提供了一些见解,但在实际使用库中提供的基本模式和工具方面仍然不是很深入。我真的很想更好地了解图书馆的各个部分是如何交互的。我想有人应该制作一个闭包工具食谱?