2009-09-16 19 views
2

Walter RumsbyWhere to place JavaScript in an HTML file提供了很好的答案。他参考了Yahoo Exceptional Performance团队所做的工作,并将其推荐到place scripts at the bottom of the page。这是我一直遵循的一个强硬的规则,现在已经有一段时间了。在同一个线程Levi Rosol指出“它的最佳位置[JavaScript]就在你需要它之​​前。”这是我现在陷入困境的困境。将jQuery引用放置在HTML文档的底部断点用户控件

我在页面末尾添加了对jQuery的引用,但遇到了如何构建用户控件的问题,我想添加客户端侧功能。具体来说,我很难制定适应依赖关系的最佳方法。用户控件的span标签包含一个数字值,我想根据用户在用户控件中检查的复选框数量来更新。我正在使用jQuery来查找span标签并更新其文本属性。

不幸的是,除非我对jQuery的引用出现在用户控件之前,否则我收到JavaScript错误。这很有意义,因为控件引用了尚未添加的函数。我可以想出几个解决方案,但我正在寻找最佳实践方案。

  1. 将引用放置在用户控件内部的jQuery库中。
    • 缺点:如果用户控件被放入中继器,将会对jQuery库进行多重引用。
  2. 在用户控件中不放入JavaScript,并编写所有代码以更新包含页面中用户控件的span标签。
    • 缺点:我最终会在多个地方使用相同的代码,从而造成潜在的维护噩梦。
  3. 将jQuery引用放置在页面的head部分。

这些都是选择和缺点,我想出了思考这个问题的解决方案时。我当然愿意提供更好的解决方案的建议,并且不会找到我应该选择哪三个的建议。

回答

1

另一种选择是通过注册脚本引用到文档头的usercontrol中的启动脚本来动态生成脚本引用。

javascript函数可以检查现有的jQuery引用,如果没有找到,请将该引用写出。这将解决多个参考。一个基本的例子被讨论了in this thread

0

对此我找到的最简单的解决方案是使用助手来累积Javascript片段以包含在页面主体中,同时呈现其他页面元素。然后,您可以先包含jQuery,然后再包含任何延迟的文字JavaScript片段。

它确实需要在页面生成期间保持一些额外的状态,这可能会使渲染管线变得复杂一点。但是,它允许您在加载页面后选择任何现有的jQuery引用,而无需复杂的DOM操作,从而获得延迟的Javascript包含。

+0

你有什么例子吗? – ahsteele 2009-09-16 22:59:11

+0

我不知道你在用什么语言或工具包,但总体概述如下:用'addToHeader'和'addToFooter'方法创建一个名为'JSHelper'的单例类,每个类都接受一个字符串参数并附加它到一个'header'或'footer'数组实例变量。然后,在您的模板或渲染方法中,在页面的部分中调用相应的'outputHeader()',并在标记之前调用'outputFooter()'。 (将这些实施留给读者作为练习。) – rcoder 2009-09-17 16:43:25

2

有一个谷歌项目,旨在解决这些痛苦,你可能会想看看所谓的极端爱国义:

http://code.google.com/p/jingo/

我推荐另一种解决方案是像YUI加载器加载器。

http://developer.yahoo.com/yui/yuiloader/

它可以让你管理的依赖等,以及它,当你使用他们的UI组件的不只是有用的。它可以用于任何事情;只需看看addModule附近的文档。

如果您使用ASP.NET ScriptManager是另一个很好的解决方案。

相关问题