




























前言
虽然ScriptLoader这个组件产生于一个基于组件部署的系统,但是其实它并没有完全实现预先的目标,和平台系统更好的协调工作.这次因为要将这个组件用在我的另一个正在开发的平台系统中,所以对整个组件进行了一次升级和完善,解决了原来一些遗留的问题,新增了某些功能.新的版本将能在平台和组件间更好的协调工作.
主要更新
功能演示

2. 我把后缀名为.jsresx的称为js变量资源,它的载入机制和js的载入是一样的.先判断WebForm1.aspx.zh-CN.jsresx是否存在,再判断WebForm1.aspx.zh-CN.jsresx是否存在.
jsresx是一个xml文件,格式如下
<?xml version="1.0" encoding="utf-8" ?>
<Variables>
<lang>中文</lang>
<name>浪子</name>
</Variables>
var lang='中文';
var name='浪子';
而ScriptLoader原来配置js只有两个文件lib.config和user.config, 显然每个组件都需要这些配置文件,发布的时候,变成需要把内容整合到平台底下的这两个文件中,同时js也需要整合到根目录底下的Scripts里面.显然这样子对于组件的部署是很不方便的.
在V4中,修改了这个机制,把原来的固定的配置文件(lib.config和user.config)取消,取而代之的是以.jsconfig为后缀名的xml文件,配置的格式基本上不变了,只增加了一个小的属性.
举个例子说明,会更好理解些

lib.jsconfig
<?xml version="1.0" encoding="utf-8" ?>
<Scripts>
<Script Name="jquery" Inherit="jquery.min.js">
</Script>
</Scripts>
<?xml version="1.0" encoding="utf-8" ?>
<Scripts>
<Script Name="MyScript" Inherit="myscript1.js">
<References>
<Reference Name="demo2"></Reference>
</References>
</Script>
<Script Name="demo2" Inherit="demo2.js">
<References>
<Reference Name="jquery" Namespace="lib"></Reference>
</References>
</Script>
</Scripts>
这段描述有点拗口.不过我们可以看得出来, namespace是和jsconfig所在的文件夹相对应的. 当一个jsconfig文件放在某个文件夹底下的时候,在这个jsconfig中配置的js都会被加上这个文件夹的名称作为一个前缀namespace,比如jquery这个js被定义在lib文件夹下的lib.jsconfig里面,所以在别的jsconfig引用它的时候,就必须标明是Namespace="lib", 而在lib.jsconfig中要引用jquery,则不需要多加这个属性,同一个jsconfig中的js默认为同一namespace底下.
不过有两种情况是不会自动添加文件夹名称作为namespace的:
1.程序根目录
2.Scrtipts文件夹内,这个是为了和以前的版本兼容
css的载入也是同样的,文件夹会作为一个namespace加到name里面,除了根目录和Styles文件夹除外.比如

则载入的代码就变为
protected void Page_Load(object sender, EventArgs e)
{
LangZi.Scripts.ScriptLoader loader = LangZi.Scripts.ScriptLoader.RegisterInstance(this);
loader.LoadStylesheet("Stylesheet1");
loader.LoadStylesheet("Custom.Stylesheet2");
}
其实这里还有一个重要的功能没有实现,就是类似JSI 的冲突隔离,因为两个框架的关注点不一样,所以ScriptLoader暂时没有考虑这个功能,不过如果实现这个功能,将对组件的部署提供更稳健的保障,或许等待下一个版本:)
<httpHandlers>
<add verb="GET" path="*.js" type="LangZi.Scripts.ScriptLoaderHandler,LangZi.ScriptLoader"/>
<add verb="GET" path="*.css" type="LangZi.Scripts.ScriptLoaderHandler,LangZi.ScriptLoader"/>
</httpHandlers>
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="LoaderSuffix" value=".aspx"/>
</appSettings>
<system.web>
<httpHandlers>
<add verb="GET" path="*.js.aspx" type="LangZi.Scripts.ScriptLoaderHandler,LangZi.ScriptLoader"/>
<add verb="GET" path="*.css.aspx" type="LangZi.Scripts.ScriptLoaderHandler,LangZi.ScriptLoader"/>
</httpHandlers>
</system.web>
</configuration>
<script src="LangZi.Scripts.boot.js" charset="UTF-8" type="text/javascript"></script>
<script src="LangZi.Scripts.boot.js.aspx" charset="UTF-8" type="text/javascript"></script>
protected void Page_Load(object sender, EventArgs e)
{
LangZi.Scripts.ScriptLoader loader = LangZi.Scripts.ScriptLoader.RegisterInstance(this);
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。