惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 浪子

LINQ TO Reflection(反射) 你真的懂HTML吗-从"最新闪存"说起 LINQ TO SQLite实践指南 [TDD]由SearchCriteriaBinder看Test Driven与Test First [OpenSource] ScriptLoader V5:不一样的体验,客户端分布式缓存平台 [OpenSource] ScriptLoader V4:与组件系统共舞,让分享更清晰 [OpenSource]ScriptLoader: 轻松管理你的js 类库 关于Windows Mobile 6 Professional Emulator中的一个串口设置小问题. 文件被数字签名策略拒绝(File was rejected by digital signature policy) [开源第一波]SmartScript Ajax中动态执行返回到innerHTML中的js [Silverlight探秘]深入探索Silverlight与Javascript的交互 [Silverlight探秘]利用Silverlight调用Javascript的方法 [Silverlight探秘]利用Javascript调用silverlight的方法 encodeURI/decodeURI与UrlEncode/UrlDecode,噩梦在继续 [MapEasy]浅析ListenerSupport 技术人,什么才是你的成功? [Flash FileUpload]用flash.net.FileReference实现ASP.NET无刷新文件上传 [SmartScript]js类库管理不再发愁
[OpenSource]ScriptLoaderV2:彻底改变你的编程习惯
浪子 · 2008-06-13 · via 博客园 - 浪子

摘要:

[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