ruby on rails -如何对一个大的Javascript文件进行作用域或分区

ruby on rails - How do I scope or partition 1 big Javascript file

本文关键字:文件 Javascript 分区 作用域 一个 rails on ruby      更新时间:2023-09-26

这适用于所有服务器/客户端web应用程序,但我想知道无论是rails还是asp.net。

一个好的做法是有一个大的application.js文件与我所有的JavaScript。因此,当我有多个页面或操作时,我如何确定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解决方案应该在任何地方工作:

http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

这基本上是基于dom的路由之母。您为body标记提供属性,以指定您所处的位置。通读一遍,它非常简单,而且功能齐全。

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

在那篇文章中还有一些后续链接,你也应该阅读它们,并决定哪一个最适合你。

<<p> 捆绑脚本/strong>

在JavaScript中"你写的/调试的就是你发布的"是一种误解:

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

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

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

file1:

var FOO = {
};

file2:

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

file3:

FOO.shopping = {
  init     : function(){ ... },
  cart     : function(){ ... },
  category : function(){ ... }
};

这样,你基本上得到了与在一个文件中相同的结果,但在设计应用程序时,它也更清晰一些。

编辑:这个解决方案是使用jQuery的$(document).ready()函数。如果不希望这样做,您还可以将它连接到任何其他ready事件。