如何对1个大Javascript文件进行作用域或分区

如何对1个大Javascript文件进行作用域或分区,javascript,ruby-on-rails,asp.net-mvc,web-applications,Javascript,Ruby On Rails,Asp.net Mvc,Web Applications,这适用于所有服务器/客户端web应用程序,但我想知道rails或asp.net的情况 一个很好的做法是使用我所有的JavaScript创建一个大的application.js文件。因此,当我有多个页面或操作时,如何确定javascript的范围 例如,我有一个登录页面和客户输入表单 在登录页面上,我想在document.ready上设置用户名的焦点,在客户输入表单中,我想在名字的文本框上设置focus,执行一些繁重的Ajax和客户端验证。如何确保脚本不会发生冲突并正确地确定其范围 脚本的两个部分

这适用于所有服务器/客户端web应用程序,但我想知道rails或asp.net的情况

一个很好的做法是使用我所有的JavaScript创建一个大的application.js文件。因此,当我有多个页面或操作时,如何确定javascript的范围

例如,我有一个登录页面和客户输入表单

在登录页面上,我想在
document.ready
上设置用户名的焦点,在客户输入表单中,我想在名字的文本框上设置
focus
,执行一些繁重的Ajax和客户端验证。如何确保脚本不会发生冲突并正确地确定其范围

脚本的两个部分都存在于一个文件中,因此如何在正确的时间访问脚本的正确部分

是否有最佳实践建议?我不想为单个控制器操作加载单独的文件


任何帮助都会很棒…

您考虑过在javascript中进行位置检查吗

类似于

if(location.href.match(/login\.aspx/)){
    //code here
} else if(location.href.match(/otherpage\.aspx/)){
    //other code here
}

仅执行代码的特定部分

我也遇到过类似的问题,但不是在rails中,而是在asp.net中

此javascript解决方案应在以下任何位置工作:

这基本上是基于DOM的路由之母。将属性赋予指定位置的body标记。通读一遍,它非常简单,功能强大

基于DOM的路由现在非常流行,并且已经在很多框架中实现(我很确定rails有自己的解决方案),但是这个简单的版本可以在任何地方轻松实现

在那篇文章中也有一些后续链接,你也应该阅读它们并决定什么对你最好

捆绑脚本

在JavaScript中“编写/调试的内容就是发布的内容”是一种误解:

由于它是一种在客户端解释的脚本语言,您可以直接通过网络发送它,而无需任何处理,但它会导致不必要的大文件和大量单独的请求:每个文件一个请求。因此,您可以删除其中的所有注释/空格,并将所有代码放入一个文件中,但这会导致无法维护的代码。你可能认为这是一个必要的权衡,但事实并非如此

您可以“构建”将它们捆绑在一起的javascript文件,并将其内容缩小到更小的大小。有很多工具可以使用,我相信rails有自己的解决方案(在您最喜欢的搜索提供商上搜索捆绑javascript)。您可以在测试环境中使用未绑定/未统一的代码,因此开发和调试非常容易。当您需要将其发布到生产环境时,可以捆绑脚本

然后可以在不同的文件中定义对象/函数,如:

文件1:

var FOO = {

};
文件2:

FOO.common = {
  init     : function(){ ... },
  finalize : function(){ ... }  
};
文件3:

FOO.shopping = {
  init     : function(){ ... },
  cart     : function(){ ... },
  category : function(){ ... }
};
通过这种方式,您基本上可以获得与1个文件相同的结果,但在设计应用程序时,阅读起来更清晰一些


编辑:此解决方案使用jQuery的
$(document).ready()
函数。如果这是不可取的,您也可以将其连接到任何其他就绪事件。

我猜它的可伸缩性与性能增益相比很小。为什么在所有Javascript中都有一个大的application.js是一个好的做法?一般来说,我喜欢使用“显示模块模式”,允许我确定模块的范围并保持变量私有。我还能够根据模块将代码分为不同的文件。对于普通文件,我将它们设置为捆绑包,以便所有JS都包含在一个文件中并缩小。您成功地组织了代码吗?