[OpenSource]ScriptLoaderV2:彻底改变你的编程习惯

摘要:

[OpenSource]ScriptLoader: 轻松管理你的js 类库一文发布后,有的园友反映,侵入性还是有点太强。昨天晚上半夜想到一个不错的点子,越想越睡不着,最终还是爬起来把ScriptLoader升级到了V2,这个版本将给你更便利的脚本文件组织体验,增加了自动关联、多语言支持途径、诱人的Syntactic Sugar,使用ScriptLoader将改变你以往的编程习惯^_^。

简介:

ScriptLoaderV2增加一些新特性:

  1. 对Aspx无侵入性的脚本引入机制。
  2. 多语言资源的支持途径。
  3. 让你更容易load module的Syntactic Sugar。

 

无侵入的脚本引入机制:

当前我们的脚本组织方式,一般是每个aspx都会通过script标签引入一些js核心类库,然后在aspx页面里面混杂一些当前页面所需的业务逻辑脚本。

image

这样子的写法导致js和我们的aspx进行了太紧密的结合,同时也不利于整个项目的维护。针对此,ScriptLoader提供了一个HttpModule来结合进行js的引入。当读入WebForm1.aspx的时候会自动帮你Load同目录下的WebForm1.aspx.js文件,因为是经过ScriptLoader导入的,所以具备ScriptLoader的特点,比如缓存,只要你的webForm1.aspx.js最后修改日期没有变,就可以一直利用客户端的缓存。

image

不过你可能会想到这样一种情况:

image

我们经常使用<%=this.TxtName.ClientID%>这种方法来获取服务端控件在客户端的唯一id,那这个情况在外部引入的js是没办法使用的,所以我引入了ScriptLoaderV2的第二个特性。

多语言资源的支持途径:

通过ScriptLoader.SetVariable方法进行赋值。

image

相关的方法还有

image

如果你用到了这个特性,那会产生侵入性了,如果你不想产生侵入性,你也可以使用Asp.Net原始的方法:

image

那这个特性跟多语言又有什么关系呢?

因为这其中有个方法是读取xml配置文件直接设置变量的,xml如下:

image

读入的代码:

image

因此,如果你想对这些变量做根据不同的语言做不同的赋值的话,就可以多写几个config,比如myVars-en-US.config,myVars-zh-cn.config,然后根据不同语言版本载入不同的变量,而js中需要做多语言的都用变量代替字符常量。

image 

当然这还有更好的集成方式,就是把页面组织结构改成如下形式

image

然后就像第一个特性一样,自动根据语言版本载入不同js或者config,目前未增加这个特性,因为还没有办法考虑到有些什么特殊情况,所以还不准备增加此特性,不过这个的修改也是很快的,如果你有需要可以自行下载代码,进行修改,如果能把你的应用情况反馈给我,那自然更好了。时机成熟,我会考虑直接集成进ScriptLoader的代码。

变量的问题解决了,但是每个业务逻辑的js不可能离开一些核心的js类库,比如例子中的image

我需要在当前页面引入jquery类库,那怎么办?为了解决这个问题,ScriptLoader增加第三个特性。

Syntactic Sugar:

所谓Syntactic Sugar,就是一种取巧的做法,有点像Vs2008中的自动属性

image

其实这不是标准的语言库支持的特性,是Vs2008这个IDE为我们提供的一种便利通道。在ScriptLoader中为了解决引入脚本的问题也加入类似的特性:

image

可以看到在WebForm2.aspx.js中的头部,使用了一个叫using的方法,引入了3个在我们lib.config中配置的js module。

这个Syntactic Sugar只能用在WebForm2.aspx.js这中类型的js中,不是所有js类库都可以使用,ScriptLoader会在为aspx页面注入ScriptLoader的时候,进行分析,然后自动帮你Load这些模块。核心的类库还是必须通过lib.config/user.config进行配置的,这样子你才可以使用using(moduleName)来引入这些脚本。

后记:

我是标题党,呵呵,不要批我的标题。

如果你使用ScriptLoader的这些特性,确实可以改善你的很多js文件组织体验。现在大部分js类库更加关心功能的封装,但是对于js文件的组织管理甚少关注,ScriptLoader就是为了填补这个空白而出现的。

后续的版本会增加更多让你心动的特性,比如ClientCacheManager :)

Examples包含在src发布包中,你也可以通过svn获取ScriptLoader最近的版本

Http://www.sourceforge.net/projects/scriptloader

posted @ 2008-06-13 13:24 浪子 阅读(...) 评论(...) 编辑 收藏