﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jindw的blog-随笔分类-JSI</title><link>http://www.blogjava.net/jindw/category/22381.html</link><description>关注：&lt;a href="http://www.xidea.org/project/jsi/index.html"&gt;JSI 无侵入的脚本管理框架&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 12 Jul 2007 06:03:57 GMT</lastBuildDate><pubDate>Thu, 12 Jul 2007 06:03:57 GMT</pubDate><ttl>60</ttl><item><title>JSI2 新功能预告：类库导出支持、Ext集成</title><link>http://www.blogjava.net/jindw/archive/2007/07/12/129802.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 12 Jul 2007 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/07/12/129802.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/129802.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/07/12/129802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/129802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/129802.html</trackback:ping><description><![CDATA[<p><strong>* 类库导出支持（完全脱离JSI环境）</strong>
<br>&nbsp;&nbsp;&nbsp; 从JSI托管类库中，选择文件/对象集，导出为单一脚本文件，完全脱离JSI装载环境。
<br>&nbsp;&nbsp;&nbsp; 也就是说，届时JSI不仅可以作为一个运行时的脚本管理框架，也可以当作一个部署时的脚本定制、打包工具。</p>
<p>&nbsp;&nbsp;&nbsp; 我是看Ext的定制工具后产生这个想法的，JSI的依赖定义API完全可以用作一个通用的脚本定制、打包工具的依赖描述语言。</p>
<p><strong>* Ext集成（欢迎Ext用户加入） </strong>
<br>&nbsp;&nbsp;&nbsp; 集成Ext，一方面可以弥补JSI组件的缺乏。另一方面可以优化Ext的装载延迟。
<br>  ext目前大小为：462,031字节，JSI2Alpha版的内核为35,140字节，不到Ext的十分之一（文件大小均在文本压缩之前记数）。集成Ext后，用户可以使用JSI导入函数，按需导入那些页面上<strong>直接</strong>使用到的元素。</p>
<p>  一些细节的想法：
<br>&nbsp;&nbsp;&nbsp; 初步决定使用jquery为其基础类库（prototype不必担心，JSI可以隔离脚本冲突，不会影响到prototype用户）。
<br>&nbsp;&nbsp;&nbsp; 装载单元划分的两种想法：
<br>&nbsp; &nbsp; 1.按照 <a href="http://extjs.com/download/build" target="blank">http://extjs.com/download/build</a> 中描述的定制模块划分（可能做些文件合并，避免零碎 件的装载开销）
<br>&nbsp;&nbsp;&nbsp; 2.按照Ext内部包划分（Ext 下载包的packages目录下好像已经做了文件合并）
<br><strong>
<br>我个人还没用过Ext，非常希望有Ext用户合作。</strong></p>
<br><img src ="http://www.blogjava.net/jindw/aggbug/129802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-07-12 12:35 <a href="http://www.blogjava.net/jindw/archive/2007/07/12/129802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]云想衣裳花想容－－JSI组件模型介绍（二）</title><link>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 27 Jun 2007 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126498.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126498.html</trackback:ping><description><![CDATA[<h1>装饰引擎简介：</h1>
系统默认的装饰引擎为：org.xidea.decorator.DecoratorEngine。<br>
JSI装载后，将做如下操作：<br>
<ol>
    <li>判断有无装饰器命名空间声明（xmlns:d= "http://www.xidea.org/taglib/decorator"）</li>
    <li>若有，将在文档装载结束后，启动装饰引擎，初始化当前可用的装饰提供者表。（装饰提供者是一个JavaScript包，在注册这种装饰包时可同时指定他的别名，别名*表示默认包）</li>
    <li>遍历当前文档，凡是该命名空间的节点，都被看作需要装饰的元素。若当前文档存在装饰元素，启用遮罩（关机效果），页面将不可操作（仍可查阅）。</li>
    <li>查找装饰元素对应的装饰类（通过tagName判断类名），采用异步方式动态装载这些装饰器类（不会装载到全局空间），并更新当前进度信息，同时设置装饰器之间的关系（parent,children）。</li>
    <li>以深度遍历的方式遍历这些节点，注册组件（以后可以通过$JSI.getComponent函数获取装饰器对象），依次执行他们的before操作，和decorate操作。</li>
    <li>完成装饰，取消遮罩，页面进入可用状态。</li>
</ol>
<h1>装饰器规范简介：</h1>
装饰器指的是所有拥有decorate成员方法的类。一般来说，可将一组装饰器归为同一个包中（太复杂的装饰器，可将具体逻辑放置在其他包中），能后在配置文件中定义装饰包。<br>
scripts/config.js&nbsp;&nbsp; $JSI.addDecoratorProvider("org.xidea.decorator","xidea","*");<br>
<br>
装饰器类包含两个方法before、docorate分别在遍历前（子节点未装饰）和遍历后（子节点装饰完成）调用。<br>
<br>
同时，装饰引擎遍历时还将注入如下三个属性：<br>
<ol>
    <li>parent：父装饰器</li>
    <li>children：子装饰器集合</li>
    <li>attributes：装饰器属性集对象（只有一个成员函数：get(attrName)&nbsp; ）</li>
</ol>
<h1>JSI现有装饰器集合简介</h1>
目前JSI2最高版本2.0预览版 (2007-04-16)包含如下装饰器：<br>
<ol>
    <li>DatePicker<br>
    日期选择控件，参照xul datepicker标签，支持弹出方式(默认值 type='pop')，和内嵌式(type='grid')</li>
    <li>Editor<br>
    编辑器控件，参照xul editor标签</li>
    <li>Spinner<br>
    Spinner控件（window时间日期管理中，年份调节的控件），参照backbase 的 Spinner标签</li>
    <li>TabBox、Tabs、Tab、TabPanels、TabPanel<br>
    TabBox(标签页)控件，参照xul tabbox标签</li>
    <li>&nbsp;Code<br>
    代码语法高亮显示控件，参照SyntaxHighlighter的显示风格</li>
    <li>Include<br>
    片断包含标签，支持xpath选取文档片断，支持xslt转换<br>
    </li>
</ol>
<br>
这些装饰器的演示见：<br><a  href="http://www.xidea.org/project/jsi/decorator/index.html">
http://www.xidea.org/project/jsi/decorator/index.html</a><br>
<br>
目前JSI自带的装饰器不够丰富，而且都还是初级阶段，不够完善。现在发布的这些装饰器，主要是为了演示JSI的工作方式，编码风格，希望能吸引第三方团队、公司在这个基础上开发出自己的更加实用的装饰器集合。<br>
<br>
JSI及其装饰引擎采用LGPL协议。可以商业应用，当能，更希望能开源。<br>
<br>
目前就我一人之力，开发一套完整的装饰器，尚需时日，这次将这个半成品拿出来演示，主要是为了展示一下jsd的风格，希望能吸引其他开发者，共同参与这个工程，有兴趣丰富JS自带I装饰器集合的网友，请msn与我联系：jindw◎xidea。org<img src ="http://www.blogjava.net/jindw/aggbug/126498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-27 10:35 <a href="http://www.blogjava.net/jindw/archive/2007/06/27/126498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> [导入]云想衣裳花想容－－JSI组件模型介绍（一）</title><link>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 27 Jun 2007 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126492.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126492.html</trackback:ping><description><![CDATA[JSI组件模型是一种用来装饰简单html元素的框架，使用简单的xml标记，标识其装饰行为，比如将一个普通的input装饰成一个日期输入控件，将一
个html ul标记装饰成菜单或树，将一个textarea装饰成一个代码语法高亮显示区域，或一个wysiwyg html编辑器。<br>
JSI启动后将自动检查decorator标记，构建层次结构，自动做相关类的寻找、导入和装饰操作；实现零脚本代码的web富客户端编程。<br>
<br>
<h2>代码示例：</h2>
<ol>
    <li>日期选择器 (DatePicker):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>编辑器示例 (Editor):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:editor</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">='editorText'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">This&nbsp;is&nbsp;some&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">strong</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">sample&nbsp;text</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">strong</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">.&nbsp;You&nbsp;are&nbsp;using&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="http://www.fckeditor.net/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">FCKeditor</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">.</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:editor</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>Spinner控件（Spinner 类似window时间日期管理中，年份调节的控件）:<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:spinner&nbsp;</span><span style="color: #ff0000;">start</span><span style="color: #0000ff;">='0'&nbsp;</span><span style="color: #ff0000;">end</span><span style="color: #0000ff;">='8'&nbsp;</span><span style="color: #ff0000;">step</span><span style="color: #0000ff;">='2'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">='0'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:spinner</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>客户端包含(Include):<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:include&nbsp;</span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">='menu.xml'&nbsp;</span><span style="color: #ff0000;">xslt</span><span style="color: #0000ff;">="menu.xsl"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">d:include</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>代码语法高亮显示控件(Code):<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:code&nbsp;</span><span style="color: #ff0000;">language</span><span style="color: #0000ff;">="js"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">alert(&#8216;Hello&nbsp;World&#8217;)</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>标签页控件(TabBox参照xul tabbox标签):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    <br>
    </li>
    <li> 综合示例:</li>
</ol>
来一个复杂一点的完整的例子,以日期选择控件的演示页面为例<br>
页面上有: 标签页装饰器（TabBox&#8230;.）、源代码高亮显示装饰器（Code）、日期选择装饰器（DatePicker）、包含装饰器（Include）<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.w3.org/1999/xhtml"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;xmlns:d</span><span style="color: #0000ff;">="http://www.xidea.org/taglib/decorator"</span><span style="color: #ff0000;">&nbsp;xml:lang</span><span style="color: #0000ff;">="zh_CN"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;lang</span><span style="color: #0000ff;">="zh_CN"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">DatePicker&nbsp;示例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">DatePicker&nbsp;示例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始标签页装饰器&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">效果</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">代码</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始日期装饰器(内嵌式)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">='grid'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test1"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始日期装饰器(弹出式)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始代码高亮显示&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:code&nbsp;</span><span style="color: #ff0000;">language</span><span style="color: #0000ff;">="xml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">!--&nbsp;开始日期装饰器(内嵌式)&nbsp;--</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">d:datepicker&nbsp;type='grid'</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">input&nbsp;type="text"&nbsp;name="test1"&nbsp;/</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">/d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">!--&nbsp;开始日期装饰器(弹出式)&nbsp;--</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">input&nbsp;type="text"&nbsp;name="test2"&nbsp;/</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">/d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">select&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="margin-left:120px"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">option</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">弹出的datepicker&nbsp;可覆盖IE&nbsp;select</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">option</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">select</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">hr&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始Include装饰器,包含装饰器菜单&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:include&nbsp;</span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">='menu.xml'&nbsp;</span><span style="color: #ff0000;">xslt</span><span style="color: #0000ff;">="menu.xsl"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">d:include</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
<br><span></span>
<div class="dp-highlighter">
</div>
<br>
<br>
<h2> 装饰结果：</h2>
<br>
<img src="http://www.blogjava.net/images/blogjava_net/jindw/dp.JPG" alt=""><br>
<br>
<br>
<br>
<font color="#ff0000">云想衣裳花想容－－JSI组件模型介绍（二）已经发布，那里有装饰过程及其原理的介绍：</font><br>
<a href="http://www.javaeye.com/topic/71425">http://www.javaeye.com/topic/71425</a><br>
<h1><br>
</h1><img src ="http://www.blogjava.net/jindw/aggbug/126492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-27 10:24 <a href="http://www.blogjava.net/jindw/archive/2007/06/27/126492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入] 百花齐放 日月同辉――采用JSI解决不同类库间的冲突  </title><link>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 23:46:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126241.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126241.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体;">众所周知，</span> <span lang="EN-US">Scriptaculous</span><span>所依赖的</span><span lang="EN-US">Prototype</span><span>库与</span><span lang="EN-US">jQuery</span><span>存在冲突。所以同时使用比较困难。</span></p>
<p class="MsoNormal"><span lang="EN-US">JSI</span><span>针对每一个装载的脚本都有完全独立的执行上下文。所以这个问题能在</span><span lang="EN-US">JSI</span><span>上彻底解决。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">下面的例子，我们将在同一个页面上同时使用</span><span lang="EN-US">Scriptaculous</span><span>和</span><span lang="EN-US"> jQuery </span><span>类库。证实一下</span><span lang="EN-US">JSI</span><span>隔离冲突功能。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">示例页面（</span><span lang="EN-US">hello-jquery-aculo.html</span><span>）：</span></p>
<span style="font-family: 宋体;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;加入引导脚本&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp; <br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入jQuery&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"></span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">org.jquery.$</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp; <br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入Scriptaculous&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"></span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">us.aculo.script.Effect</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp;&nbsp;<br>&nbsp; <br>&nbsp;&nbsp;<br>$(document).ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp; <br>&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用jQuery添加一段问候语&nbsp; </span><span style="background-color: #f5f5f5; color: #000000;"> <br>&nbsp;&nbsp;$(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;p&nbsp;id='helloBox'&nbsp;style='background:#0F0;text-align:center;font-size:40px;cursor:pointer;'&gt;Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous&lt;/p&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; .appendTo('body');&nbsp;&nbsp;<br>&nbsp; $('#helloBox').ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用Scriptaculous高亮显示一下刚才添加的内容&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;Effect.Highlight('helloBox');&nbsp;&nbsp;<br>&nbsp; }).click(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">当用户单击该内容后使用jQuery实现渐出&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp; $('#helloBox').fadeOut();&nbsp;&nbsp;<br>&nbsp; });&nbsp;&nbsp;<br>&nbsp;});&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp; &nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp; &nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">文档装载后，jQuery将在后面添加一段问候语；并使用Scriptaculous高亮显示（Highlight）；在鼠标点击后在使用jQuery渐出（fadeOut）。</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;</span></div>
<br>
</span><img src ="http://www.blogjava.net/jindw/aggbug/126241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-26 07:46 <a href="http://www.blogjava.net/jindw/archive/2007/06/26/126241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入] 海纳百川 有容乃大――采用JSI封装、集成第三方类库   </title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126038.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126038.html</trackback:ping><description><![CDATA[Java的成功，离不开它那个庞大的类库，不单是sun的类库，很多细节的实现都取自第三方（如xml解析采用Apache的实现）。<br>
<br>JSI暂时不大算编写丰富的公共API，但是我们可以集成其他成熟的类库，同时隔离他们的依赖，隔离各个脚本的执行上下文，消除命名冲突的危险。<br>
<br>
这里我们详细介绍一个复杂一点的实例：类似Windows XP文件浏览器左侧的滑动折叠面板(任务菜单)效果。<br>
<br>
我们先集成Scriptaculous Effect类库，并且在这个基础上按我个人的习惯对一个面板折叠效果做一个简单的封装，展示框架的类库封装功能。<br>
<br>
1。集成Scriptaculous类库：<br>
<br>
这里我们不做过多介绍，详细情况请参考集成实战；我们发布的版本中已经把Scriptaculous放置于us.aculo.script包中，您可以把这些作为系统内置的类库使用。<br>
<br>
2。编写我们的折叠面板函数（example/effect.js）：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*&nbsp;<br>&nbsp;*&nbsp;滑动面板实现.&nbsp;<br>&nbsp;*&nbsp;当指定元素可见时，将其第一个子元素向上滑动至完全被遮掩（折叠）。&nbsp;<br>&nbsp;*&nbsp;当指定元素不可见时，将其第一个子元素向下滑动至完全显示（展开）。&nbsp;<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;slidePanel(panel){&nbsp;&nbsp;<br>&nbsp;&nbsp;panel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(panel.style.display</span><span style="color: #000000;">==</span><span style="color: #000000;">'none'){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动展开实现&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideDown(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动闭合实现&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideUp(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;}&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<br>3。编写包定义脚本（example/__$package.js）：
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">添加slidePanel（滑动面板控制）函数&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addScript(</span><span style="color: #000000;">"</span><span style="color: #000000;">effect.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">slidePanel</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);&nbsp;&nbsp;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">给effect.js脚本添加对us.aculo.script包中effects.js脚本的装载后依赖this.addScriptDependence("effect.js",&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">"</span><span style="color: #000000;">us/aculo/script/effects.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">); </span><span style="color: #000000;"></span></div>
<br>
4。在网页上运用上面的类库：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">重用aculo&nbsp;Effect脚本实例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="/styles/default.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">example.slidePanel</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_header"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick</span><span style="color: #0000ff;">="slidePanel('menu_block1')"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板&nbsp;1&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_block"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="menu_block1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
<br>
<p class="MsoNormal"><strong><span new="" courier="" color:="" lang="EN-US">onclick</span></strong><strong courier="" color:="" style="font-size: 10pt;" lang="EN-US">=</strong><strong courier="" color:="" style="font-size: 10pt;" lang="EN-US"></strong>"slidePanel('menu_block1')"这个事件函数将在我们点击面板标题时触发，能后会调用Scriptaculous Effect的具体实现去实现我们需要的滑动折叠功能。<br>
</p>
<br>
&nbsp;<br>
<h1>壁立千仞 无欲则刚――控制依赖</h1>
<br>
java可以随意的使用第三方类库，可是JavaScript却没那么幸运，随着类库的丰富，烦杂的依赖关系和可能的命名冲突将使得类库的发展越来越困难。程序的易用性也将大打折扣。<br>
<br>
命名冲突的危险无形的增加你大脑的负担；随着使用的类库的增加，暴露的依赖也将随之增加，这是复杂度陡增的极大祸根，将使得系统越来越复杂，越来越难以控制。潜在的问题越来越多，防不胜防。<br>
<br>
JSI的出现，可以解决上述问题，我们建议类库的开发者将自己类库的依赖终结在自己手中，避免依赖扩散，以提高类库的易用性。<br>
<br>
同样使用上面的例子，假如我们想抛开JSI，实现同样的功能，那我们的页面代码将是（类库代码不用改动）：<br>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">重用aculo&nbsp;Effect脚本实例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="/styles/default.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;script&nbsp;src="/scripts/boot.js"&gt;&lt;/s&nbsp;cript&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;script&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;$import("example.slidePanel");&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;/sc&nbsp;ript&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/net/conio/prototype/v1_5/prototype.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/us/aculo/script/v1_7/effects.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/us/aculo/script/v1_7/builder.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/example/effect.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_header"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick</span><span style="color: #0000ff;">="slidePanel('menu_block1')"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板&nbsp;1&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_block"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="menu_block1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;</span></div>
<br>
这个例子的html代码明显比上面的复杂了，一堆堆的script标签，而且还是有序的；还出现在页面上，重构起来也极其麻烦。<br>
<br>
可以看出，JSI的加入可以让类库更加易用，html代码更为简洁，最终用户已经不必关心所用类库的依赖了。<br>
<br>
JSI中每一个脚本有一个单独的执行上下文。各个脚本顶部变量你可以随便使用，不必担心不同脚本中的命名冲突，不会污染全局变量空间，这种方式可以用于解
决某些类库间变量冲突的问题（如jQuery和Prototype的$函数）。我们甚至可以做到同一个页面上间接加载同一种类库的两个不同版本，不相互影
响。<br>
<br>
使用JSI后，很多细节我们可以在包中封装掉，不需要告诉类库使用者太多。大大增加类库的易用性。同时，类库封装的支持可以让我们在第三方库的基础上轻松的按自己的喜好编写自己的类库，同时避免依赖扩散造成的复杂度增加。<br>
<br>
使用JSIntegration唯一多出的负担就是编写包定义文件，不过想想这种定义文件可是一劳永逸的（以后就不需要每次导入脚本的时候都小心翼翼的判
断那个脚本先导入那个后导入，有那些间接使用到的类库需要导入，等等），而且有了包结构后对于代码组织、重用，以及文档的编写阅读，都将非常有利。<img src ="http://www.blogjava.net/jindw/aggbug/126038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-25 10:14 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]脚本安需导入的三种模式的对比</title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126020.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126020.html</trackback:ping><description><![CDATA[<h2><font><strong><font size="4"><strong>何谓安需装载？</strong></font></strong></font></h2>
<div><font size="2"> 脚本程序一般都是下载后执行
，当脚本库非常庞大时，一次性下载起来非常费时，传统的解决方式是，按功能模块把脚本写在不同的文件中，页面上手动加入script标签装载指定内容，但
是这有一些缺点，类库的使用者需要知道没个脚本之间的关系，顺序要求等等，而不可能要求每个类库使用者都对其非常熟悉，出错的可能性很大。于是很多框架开
始支持导入指令，想使用什么一个导入函数就完了，不必一堆堆的script文件，不用小心翼翼的关注着他们的依赖关系。</font></div>
<br>
<h2><font size="4"><strong>安需装载可分如下三种模式：</strong></font></h2>
<ul>
    <li><font color="#000066"><strong>即时同步按需装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>阻塞，</strong></font><font color="#000066"><strong>JSI、JSVM、dojo）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    最简单的按需装载实现，通过XMLHttpRequest同步装载脚本文件实现。问题是，浏览器使用这种方式同步获取资源时将导致浏览器阻塞：停止响应用户事件、停止页面重画操作。所以，虽然编程最为简单，但是用户体验最差。 <br>
    </font></font></li>
    <li><font color="#000066"><strong>异步</strong></font><font color="#000066"><strong>按</strong></font><font color="#000066"><strong>需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+</strong></font><font color="#000066"><strong>）。<br>
    </strong></font><font color="#000066"><font color="#000000">异步导入，不必多做解释，用户体验好，但是因为其异步特征，处理起来比较麻烦。</font></font></li>
    <li><font color="#000066"><strong>延迟同步按需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    JSI通过动态预装载功能实现的一种同步获取资源的方法，虽然也是同步，但没有阻塞，可以算时兼顾易用性和用户体验的机决方按。缺点时</font></font><font color="#000066"><font color="#000000">有一定延迟，当前脚本标签中不可用。 </font></font> <br>
    </li>
</ul>
<h2><strong>使用方法（JSI示例）</strong></h2>
以一个代码语法着色程序为例：<br>
类库位置：example/<span style="color: #000000;">codedecorator</span>/code.js<br>
页面位置：example/xxx.html
<ul>
    <li><font color="#000066"><strong>即时同步按需装载</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$import(</span><span style="color: #000000;">"</span><span style="color: #000000;">example.codedecorator.Code</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;code1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Code();<br>code1.id&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">libCode</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>code1.decorate();&nbsp;</span></div>
    <br></li>
    <strong>    </strong>
    <li><strong><font color="#000066"><strong>异步</strong></font><font color="#000066"><strong>按</strong></font><font color="#000066"><strong>需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font></strong>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$import(</span><span style="color: #000000;">"</span><span style="color: #000000;">example.</span><span style="color: #000000;">codedecorator</span><span style="color: #000000;">.Code</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(Code){<br>&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;code1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Code();<br>&nbsp;code1.id&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">libCode</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;code1.decorate();<br>})&nbsp;</span></div>
    <br>
    <strong><font color="#000066"><font color="#000000">    </font></font></strong>
    <strong><font color="#000066"><font color="#000000">        </font></font><font color="#000066"><font color="#000000">
    </font></font></strong></li>
    <strong>        </strong>
    <li><strong><font color="#000066"><strong>延迟同步按需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font>         </strong>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">../scripts/boot.js</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">example.</span><span style="color: #000000;">codedecorator</span><span style="background-color: #f5f5f5; color: #000000;">.Code</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,</span><span style="background-color: #f5f5f5; color: #0000ff;">true</span><span style="background-color: #f5f5f5; color: #000000;">);<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br></span><span style="background-color: #f5f5f5; color: #0000ff;">var</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;code1&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;Code();<br>code1.id&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">libCode</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">;<br>code1.decorate();<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></div>
    <br>
    </li>
    <strong><font color="#000066">    </font></strong></ul>
    <strong><font color="#000066">    </font></strong>
    <h2><strong><font color="#000066"> 示例说明：</font></strong></h2>
    <font color="#000066">在线测试 <br>
    </font>
    <p><font color="#000066"><a href="http://jsintegration.sourceforge.net/example/code.html">http://jsintegration.sourceforge.net/example/code.html</a></font></p>
    <p><font color="#000066"><a href="http://www.xidea.org/project/jsi/example/code.html">http://www.xidea.org/project/jsi/example/code.html</a><br>
    </font></p>
    <p><strong><font color="#000066">     </font></strong></p>
    <h2><strong><font color="#000066">参考：</font></strong></h2>
    <strong><font color="#000066">    </font></strong>
    <p><strong><font color="#000066"><font color="#000000" size="4">JSI 导入函数： <a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html?{cmd:'genObject',args:['$import','']}#$import">function $import(path, callbackOrLazyLoad, target )</a></font></font></strong></p>
    <strong><font color="#000066">    </font></strong>
    <strong></strong>  <img src ="http://www.blogjava.net/jindw/aggbug/126020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-25 09:24 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI2性能测试报告</title><link>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 22 Jun 2007 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125843.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125843.html</trackback:ping><description><![CDATA[<p><strong>装载效率测试</strong>
<br>测试页面见：test/load-eff-test.html</p>
<p>为了测试结果更显客观，我选择了第三方类库的装载测试：
<br>'com.yahoo.yui.*',
<br>'net.conio.prototype.*',
<br>'net.fckeditor.*',
<br>'org.jquery.*',
<br>'us.aculo.script.*'
<br>共22个脚本文件（对于JSI来说还有诺干包定义文件）。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">FF2:&nbsp;&nbsp;<br>标记导入时间（原始方式）:</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">1047</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">437</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">&nbsp;&nbsp;<br>同步导入时间:</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">453</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">437</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">453</span><span style="color: #000000;">&nbsp;&nbsp;<br>延迟导入时间:</span><span style="color: #000000;">921</span><span style="color: #000000;">,</span><span style="color: #000000;">765</span><span style="color: #000000;">,</span><span style="color: #000000;">891</span><span style="color: #000000;">,</span><span style="color: #000000;">906</span><span style="color: #000000;">,</span><span style="color: #000000;">953</span><span style="color: #000000;">,</span><span style="color: #000000;">906</span><span style="color: #000000;">,</span><span style="color: #000000;">922</span><span style="color: #000000;">&nbsp;&nbsp;<br>异步导入时间:</span><span style="color: #000000;">859</span><span style="color: #000000;">,</span><span style="color: #000000;">1093</span><span style="color: #000000;">,</span><span style="color: #000000;">1141</span><span style="color: #000000;">,</span><span style="color: #000000;">1031</span><span style="color: #000000;">,</span><span style="color: #000000;">1641</span><span style="color: #000000;">,</span><span style="color: #000000;">1125</span><span style="color: #000000;">,</span><span style="color: #000000;">1078</span><span style="color: #000000;">,</span><span style="color: #000000;">1093</span><span style="color: #000000;">,</span><span style="color: #000000;">1157</span><span style="color: #000000;">,</span><span style="color: #000000;">1141</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>IE7:&nbsp;&nbsp;<br>标记导入时间:</span><span style="color: #000000;">343</span><span style="color: #000000;">,</span><span style="color: #000000;">297</span><span style="color: #000000;">,</span><span style="color: #000000;">297</span><span style="color: #000000;">,</span><span style="color: #000000;">344</span><span style="color: #000000;">,</span><span style="color: #000000;">328</span><span style="color: #000000;">,</span><span style="color: #000000;">328</span><span style="color: #000000;">&nbsp;&nbsp;<br>同步导入时间:</span><span style="color: #000000;">281</span><span style="color: #000000;">,</span><span style="color: #000000;">250</span><span style="color: #000000;">,</span><span style="color: #000000;">235</span><span style="color: #000000;">,</span><span style="color: #000000;">235</span><span style="color: #000000;">,</span><span style="color: #000000;">234</span><span style="color: #000000;">,</span><span style="color: #000000;">234</span><span style="color: #000000;">,</span><span style="color: #000000;">250</span><span style="color: #000000;">,</span><span style="color: #000000;">265</span><span style="color: #000000;">&nbsp;&nbsp;<br>延迟导入时间:</span><span style="color: #000000;">922</span><span style="color: #000000;">,</span><span style="color: #000000;">422</span><span style="color: #000000;">,</span><span style="color: #000000;">406</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">407</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">&nbsp;&nbsp;<br>异步导入时间:</span><span style="color: #000000;">625</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">704</span><span style="color: #000000;">,</span><span style="color: #000000;">688</span><span style="color: #000000;">&nbsp;&nbsp;<br></span></div>
<br>
<p><br></p>
<p><br></p>
<p><strong>运行时间测试</strong>
<br>测试脚本管理后对新能的影响,影响因素有：全局变量和局部变量的查找时间差异，eval的脚本和script标记直接插入的脚本的可能差异。（这
个测试不具有普遍性，这里我主要是测试了一下浏览器对局部变量的访问速度【JSI里面访问变量都是装载单元内的局部变量】，所以故意测试了大量局部变量访
问的操作）
<br>测试页面见：test/runtime-eff-test.html
<br></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">FF2：&nbsp;&nbsp;<br>jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">845</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">927</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">598</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">687</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">764</span><span style="color: #000000;">,&nbsp;&nbsp;<br>scriptTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1432</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">950</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1305</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1278</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1219</span><span style="color: #000000;">,&nbsp;&nbsp;<br>evalTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1644</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1373</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1322</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1186</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1360</span><span style="color: #000000;">,&nbsp;&nbsp;<br>execTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;&nbsp;<br>dscriptTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1432</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">950</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1305</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1278</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1219</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>IE7:&nbsp;&nbsp;<br>jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">295</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">205</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">157</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">315</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">156</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">142</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">375</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">328</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>scriptTime:&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">189</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">140</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">251</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">217</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">203</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>evalTime:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">236</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">249</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">139</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">281</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">171</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">108</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">436</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">359</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>execTime:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">219</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">314</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">157</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">220</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">266</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">204</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">95</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;<br>dscriptTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">265</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">294</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">326</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">328</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">141</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">221</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">127</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">249</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span></div>
<br>
<p><br></p>
<p><br></p>
<script>render_code();</script>
<p>上面的基数太小，随机误差太大，调整原始数据从新测试一遍jsiTime和scriptTime
<br></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">576</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">658</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">688</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">703</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">611</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">608</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>scriptTime:&nbsp;</span><span style="color: #000000;">706</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">608</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">562</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">547</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">655</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">657</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br>
<p><strong><br>总结：</strong>
<br>JSI的装载性能表现不错，完全不必计较。
<br>托管代码的运行性能也没有太大区别，不过，因为。JSI托管脚本使用的变量基本都是装载单元内的局部变量（本地声明变量，或者外部依赖的引用或值拷贝），所以，对于FF这类局部变量比全局变量访问速度快不少的解释引擎，JSI托管脚本可以达到更好的运行效率。</p>
<p><span style="color: red;">有个奇怪的问题，JSI在装载类库时，与传统模式相比，肯定增加了些额外的运算，但是，貌似JSI的同步装载模式下，装载脚本的耗时比传统模式还少（IE 表现明显）？为何？</span>
<br>欢迎大家对这奇怪的现象提出自己的猜想，我稍后贴出我对此问题的看法^_^</p><img src ="http://www.blogjava.net/jindw/aggbug/125843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-22 15:01 <a href="http://www.blogjava.net/jindw/archive/2007/06/22/125843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI2Alpha及JSA1beta 发布：</title><link>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 22 Jun 2007 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125829.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125829.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div id="" style="border: 1px dotted #0010ff; color: #454548;"><span style="font-weight: bold;">JSI简介：</span><br>
<p>JSI 是一个 开放的、<strong>无侵入</strong>的 脚本库管理框架，内核不提供任何具体功能，有一些功能子项目，如网页装饰引擎。</p>
<p>更多信息请查看：<a href="http://www.xidea.org/project/jsi/">http://www.xidea.org/project/jsi/</a></p>
<br><span style="font-weight: bold;">JSA简介：</span><br>JSA最初是做JSI编译处理的一个小工具，现在也可以用来混淆、压缩脚本。支持swing和ant task两种工作方式。<br>可以通过webstart启动：<a href="http://www.xidea.org/webstart/JSA.jnlp">启动JSA（允许访问文件系统）</a>，<span style="text-decoration: underline;"></span><a href="http://www.xidea.org/webstart/JSA2.jnlp">沙箱内运行（功能受限）</a><br>
<br></div>
<br>
<p><br></p>
<p><br></p>
<p>这次发布的JSI2Alpha相对于以前的预览版本，做了一次全面的重构；同时对API做了些简化。</p>
<p><a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html">目前JSI2的公开API有：</a></p>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;导入函数&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$import(</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">path,</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">|</span><span style="color: #000000;">Function</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">callbackOrLazyLoad[可选参数],</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Object</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">target[可选参数])&nbsp;&nbsp;<br>&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;日志设置相关&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$JSI.setDefaultLogLevel(level)&nbsp;&nbsp;<br>$JSI.setLogLevel(pathPattern,level)&nbsp;&nbsp;<br>&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;装饰引擎相关函数&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$JSI.addDecoratorProvider(pkg,alias&#8230;)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">添加装饰包.&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">$JSI.decorate&nbsp;(&nbsp;)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">准备执行装饰器任务,一般在配置文件（config.js）中调用.&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;用于包定义的Package成员函数，在__package__.js中调用（this指向当前package对象）&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addScript(scriptPath,objectNames)</span><span style="color: #008000;">//</span><span style="color: #008000;">添加脚本及其声明的对象（函数、方法名）.&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.add</span><span style="color: #000000;">*</span><span style="color: #000000;">Dependence(thisPath,targetPath,beforeLoad)</span><span style="color: #008000;">//</span><span style="color: #008000;">添加脚本依赖.&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setImplementation(realPackage)</span><span style="color: #008000;">//</span><span style="color: #008000;">设置具体实现包(当前包只是其别名，并无任何内容)。&nbsp;</span></div>
<br>
<p>&nbsp;</p>
<br>
<p><strong>我们会尽量将JSI做成与具体功能无关（专著于脚本管理）。</strong></p>
<p>对于js.*.*这个类库，做了些精简。
<br>只保留下列元素</p>
<p>&nbsp;</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#js.html&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包，因为这些实在太常用了。&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;EventUtil&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;StyleUtil&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>#js.util</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包主要因为异步装载用到这些类库&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;LoadTask&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Request&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ScriptLoadTask&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;TaskQueue&nbsp;&nbsp;</span></div>
<br>
<p>&nbsp;</p>
<script>render_code();</script>
<p>发布文件说明：
<br>自该版本启，source目录将不再打包。
<br>但是在scripts目录下新增boot-with-source.js文件，该文件中包含全部源代码的数据。
<br>里面编码的源代码可以通过我们的<a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html" target="blank">文档工具</a>查看。让大家习惯一下这个工具的使用：）</p>
<p>JSA1beta：增加了对JSI2的编译支持，同时对于普通脚本的压缩，也增加了一些功能：
<br>  1. ant task 增加多文件分组合并。
<br>  2. swing ui 修正文件编码的bug。</p>
<p>下载：
<br>javaeye group:  <a href="http://jsi.group.javaeye.com/shares" target="blank">http://jsi.group.javaeye.com/shares</a>
<br>sourceforge:    &lt;系统最近好像有问题，我的文件一直没能上传成功,要过一段时间再说&gt; 。。。。。
</p><img src ="http://www.blogjava.net/jindw/aggbug/125829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-22 14:36 <a href="http://www.blogjava.net/jindw/archive/2007/06/22/125829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript模板引擎测试，让我空欢喜一场：（</title><link>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 08 Jun 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122871.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122871.html</trackback:ping><description><![CDATA[测试了一下trimpath模板引擎和一个我以前编写xml模板引擎，显示测试结果，828/16。<br><br>太让我振奋了。原想，如果效率太低我就放弃这个项目，貌似结果：这个流行的js模板引擎，和我没做优化的xml模板引擎还有这么大的差距？？？<br><br>仔细检查一下，晕倒，测试模板数据搞错了：（<br><br>纠正过来，测试数据显示，trimpath比xml模板引擎要快好几倍：（<br><br>而且，如果模板内使用的循环次数越多，差距越大：（<br><br>比较扫兴的结果。<br>决定吧这个东西从jsi系统api中删除。<br><br>不过，感觉，虽然有这点差距，xml模板引擎还是可以作为一个备用选择。<br>基于js标记库，类el表达式，对于熟悉jsp2.0，jstl的程序员来说，还是比较易懂，扩展也相对简单（trimpath没怎么研究，或许是错的）。<br><br><a href="http://www.blogjava.net/Files/jindw/template-test.rar">下载测试：</a><br>（XML Template是从jsi中拉出来的，部分测试中没有用到的依赖没有包括进去）<br><br> <img src ="http://www.blogjava.net/jindw/aggbug/122871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-08 16:15 <a href="http://www.blogjava.net/jindw/archive/2007/06/08/122871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI2 API重构进展</title><link>http://www.blogjava.net/jindw/archive/2007/06/07/122547.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 07 Jun 2007 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/07/122547.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122547.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/07/122547.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122547.html</trackback:ping><description><![CDATA[<div id="" style="border: 1px dashed #3844ff;">为了jsi2 alpha的尽快发布，我对jsi 的系统api重构了一下，删除了一些不够成熟或者没有必要的api（将他们拖到org.xidea.* 命名空间下）。<br></div>
<span style="color: #130098; font-weight: bold;"><br><br>更新（2007－6－9）<br></span>接上，移除了xml命名空间及其内容，装饰引擎。io包并入util了，移除了一些脚本，如xml 模板引擎、装饰引擎实现等。。。<br><span style="font-weight: bold;">基本上做到了功能无关了</span>。<br>只剩下html包和util包。lang包这种语言兼容包不说。<br><br>现在的类库只有（数据拷贝自JSI jsdoc）：<br><br>#js.html //保留这个包，因为这些实在太常用了，<br>&nbsp;&nbsp; * BrowserInfo<br>&nbsp;&nbsp; //保留Decorator是因为装饰器初始化，还是受到点特别关照<br>&nbsp;&nbsp; * Decorator<br>&nbsp;&nbsp; * EventUtil<br>&nbsp;&nbsp; * StyleUtil<br><br>#js.util//保留这个包主要因为异步装载用到这些类库<br>&nbsp;&nbsp;&nbsp; * LoadTask<br>&nbsp;&nbsp;&nbsp; * Request<br>&nbsp;&nbsp;&nbsp; * ScriptLoadTask<br>&nbsp;&nbsp;&nbsp; * TaskQueue<br><br>
<br>
现在的类库只有（数据拷贝自JSI jsdoc）：<br>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#js.html&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包，因为这些实在太常用了，</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;BrowserInfo<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保留Decorator是因为装饰器初始化，还是受到点特别关照</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Decorator<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;EventUtil<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;StyleUtil<br><br>#js.util</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包主要因为异步装载用到这些类库</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;LoadTask<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Request<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ScriptLoadTask<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;TaskQueue&nbsp;</span></div>
<span style="color: #130098; font-weight: bold;"></span><br style="color: red;"><span style="color: #130098; font-weight: bold;">欢迎大家提出自己的看法：）<br><br><br></span><span style="color: #130098; font-weight: bold;"><br></span>   <img src ="http://www.blogjava.net/jindw/aggbug/122547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-07 11:48 <a href="http://www.blogjava.net/jindw/archive/2007/06/07/122547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI API之BrowserInfo、EventUtil讨论</title><link>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 06 Jun 2007 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122330.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122330.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #666666;">JSI 自身提供一些常用API，数量极少，尽量以一种正式的风格提供，尽量回避争议。<br>有些是启动文件用到的，如任务队列支持，还有如装饰引擎直接用到的，如BrowserInfo、EventUtil、StyleUtil等。<br>对于启动文件中未直接用到的，如果风格的争议太大，都将剔除出去。</div>
<br><br>
<h2>BrowserInfo对象：</h2>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*<br>&nbsp;*&nbsp;BrowserInfo&nbsp;对象，用于判断浏览器的相关信息，如浏览器类型、quirks模式、客户端语言（简体中文？英语..未实现）、操作系统（未实现）等等。<br>&nbsp;*&nbsp;@public<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;isIE&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isOpera&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isGecko&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isNetscape&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isMozilla&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isFirefox&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isKhtml&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isSafari&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isKonqueror&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isQuirks&nbsp;:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){&#8230;}<br>};</span></div>
<br>其中最常用的要数 is&lt;浏览器类别&gt;（最小版本号码,最大版本号）。<br>此外，我还将BrowserInfo的函数拷贝到navigator对象上，这个有无必要呢？<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">@Deprecated&nbsp;???</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;BrowserInfo){<br>&nbsp;&nbsp;window.navigator[n]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;BrowserInfo[n];<br>}<br></span></div>
<br>
<h4>不同之处：</h4>
现在在浏览器判断上面，一般是用常量表示，比如isIE之类的，JSI的BrowserInfo使用函数，以便提供更强大更灵活的功能。<br><br>EventUtil<br>EventType 对象的成员函数有：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>addListener(el,&nbsp;type,&nbsp;fn,&nbsp;cap)<br>removeListener(el,&nbsp;type,&nbsp;fn,&nbsp;cap)<br><br>add</span><span style="color: red; font-weight: bold;">&lt;Eventtype&gt;</span><span style="color: #000000;">Listener(element,&nbsp;listener,&nbsp;captrue)<br>如addLoadListener，addMousedownListener，addMouseoutListener&nbsp;&nbsp;&nbsp;&nbsp;<br>remove</span><span style="color: red; font-weight: bold;">&lt;Eventtype&gt;</span><span style="color: #000000;">Listener(element,&nbsp;listener,&nbsp;captrue)<br>createEvent(type,&nbsp;canBubble,&nbsp;cancelable)<br>dispatchEvent(el,&nbsp;even)</span></div>
<br>其中: <span style="font-weight: bold; color: red;">&lt;Eventtype&gt;</span>代表一种事件类型。<br>W3C事件类型有：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;events&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;['click','mousedown','mouseup','mouseover','mousemove','mouseout','load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll'].<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat(['DOMFocusIn','DOMFocusOut','DOMActivate']);</span></div>
<br><br>此外，还添加了一种事件类型：DOMLoad。就是mozilla的DOMContentLoaded事件，在Dom树构造完成但图片资源等可能未完成时触发。<br>对于这种事件类型， element,&nbsp; captrue参数都将忽略。暂时只有添加函数，没有删除函数（有删除的必要吗？）。<br><br>
<h3>不同之处：</h3>
这个事件处理函数集与其他常见方式的却别有：<br>
<ol>
    <li>this支持。IE的attach方法添加的函数，运行时this指向window对象，JSI吧这点给纠正过来，与w3c的addEventListener行为一致。</li>
    <li>事件类型直接体现在函数名中，这样有利于书写上的错误及早发现。</li>
    <li>事件格式化，将事件的访问方式格式化为W3C的方式。</li>
    <li>自动清理，这也不算不同吧，现在大多数JS库都提供这个功能，就是在离开页面时清理全部注册事件。但是这对一些单页程序是无效的（OPOA，本人也比较讨厌这种模式，呵呵），以后是否可以提供一个purgeElement函数，用于清理指定元素及其子元素的事件呢？</li>
</ol>
<strong><span style="color: blue;">非常希望大家积极发表自己的看法，该修改就修改，如果争议太大，那么我将吧这些从系统API中移除。<br><br></span></strong><strong>程序下载</strong>
<p>这个API也可以脱离JSI使用，只是，在编写的时候，因为有了JSI的保护，我使用了不少内部变量，为避免可能的冲突，做了如下处理。
</p>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">#include(browser-info.js)<img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;BrowserInfo;<br>}<br><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;EventUtil&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">#include(event-util.js)<img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;EventUtil;<br>}<br></span></div>
<br><a href="http://www.blogjava.net/Files/jindw/event-util.rar">下载地址</a><br><br><br> <img src ="http://www.blogjava.net/jindw/aggbug/122330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-06 12:17 <a href="http://www.blogjava.net/jindw/archive/2007/06/06/122330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript Integration 体验教材</title><link>http://www.blogjava.net/jindw/archive/2007/06/02/121484.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sat, 02 Jun 2007 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/02/121484.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/121484.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/02/121484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/121484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/121484.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; JSI是一个简单、无侵入（被管理的脚本无需考虑JSI的存在）的脚本管理框架， JSI的出现，可以做到如下几点:<br><br>
<div style="margin-left: 40px;"><span style="font-weight: bold;">*</span> 按需装载。<br><span style="font-weight: bold;">*</span> 管理依赖，避免依赖的保露、扩散，提高类库的易用性。<br><span style="font-weight: bold;">*</span> 执行环境的隔离，避免名称冲突。<br></div>
<h2>类库装载</h2>
&nbsp;&nbsp;&nbsp; 动态装载类库是按需装载的基础，JSI的装载方式有三种：即时同步装载（可能阻塞）、延迟同步装载（需要编译）、异步装载。这里先演示一下最简单的方式，即时同步导入：<br><br>示例：重写一下jQuery的hello world。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&#8230;.<br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;加入引导脚本&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&#8230;.<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入jQuery的$函数</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">org.jquery.$</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用jQuery的$函数</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">$(document).ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){<br>&nbsp;&nbsp;alert(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">Hello&nbsp;World</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br>&nbsp;});<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&#8230;.</span></div>
<br>&nbsp;&nbsp;&nbsp; 这是默认的导入方式，当能，如果网络环境不好，这可能产生阻塞问题。所以JSI2开始增加了仍外两种导入模式。延迟同步导入，异步导入。具体用法请查看文章后面的导入函数参考。<br><br>
<h2>依赖管理</h2>
&nbsp;&nbsp;&nbsp; Java可以随意的使用第三方类库，可是JavaScript却没那么幸运，随着类库的丰富，烦杂的依赖关系和可能的命名冲突将使得类库的发展越来越困难。程序的易用性也将大打折扣。<br><br>&nbsp;&nbsp;&nbsp; 命名冲突的危险无形的增加你大脑的负担；随着使用的类库的增加，暴露的依赖也将随之增加，这是复杂度陡增的极大祸根，将使得系统越来越复杂，越来越难以控制。潜在的问题越来越多，防不胜防。<br><br>&nbsp;&nbsp;&nbsp; 所以，我们建议类库的开发者将自己类库的依赖终结在自己手中，避免依赖扩散，以提高类库的易用性。<br><br>&nbsp;&nbsp;&nbsp; 为了演示一下JSI的依赖管理，我们编写一个复杂一点的类库：类似Windows XP文件浏览器左侧的滑动折叠面板(任务菜单)效果。<br><br>1.编写我们的折叠面板函数（org/xidea/example/display/effect.js）：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*<br>&nbsp;*&nbsp;滑动面板实现.<br>&nbsp;*&nbsp;当指定元素可见时，将其第一个子元素向上滑动至完全被遮掩（折叠）。<br>&nbsp;*&nbsp;当指定元素不可见时，将其第一个子元素向下滑动至完全显示（展开）。<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;slidePanel(panel){<br>&nbsp;&nbsp;panel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(panel);<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(panel.style.display</span><span style="color: #000000;">==</span><span style="color: #000000;">'none'){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动展开实现</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideDown(panel);<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动闭合实现</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideUp(panel);<br>&nbsp;&nbsp;}<br>}</span></div>
<br>2.编写包定义脚本，申明其内容及依赖（org/xidea/example/display/__$package.js）：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">添加slidePanel（滑动面板控制）函数</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addScript(</span><span style="color: #000000;">"</span><span style="color: #000000;">effect.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">slidePanel</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br></span><span style="color: #008000;">//</span><span style="color: #008000;">给effect.js脚本添加对us.aculo.script包中effects.js脚本的装载后依赖this.addScriptDependence("effect.js",</span><span style="color: #008000;"><br></span><span style="color: #000000;">"</span><span style="color: #000000;">us/aculo/script/effects.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br></span><span style="color: #008000;">//</span><span style="color: #008000;">给effect.js脚本添加对net.conio.prototype包中$函数的装载后依赖this.addScriptObjectDependence("effect.js",</span><span style="color: #008000;"><br></span><span style="color: #000000;">"</span><span style="color: #000000;">net.conio.prototype.$</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);</span></div>
<br>3.HTML代码： <br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">重用aculo&nbsp;Effect脚本实例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="/styles/default.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">org.xidea.display.slidePanel</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_header"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick</span><span style="color: #0000ff;">="slidePanel('menu_block1')"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板&nbsp;1<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_block"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="menu_block1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></div>
<br>&nbsp;&nbsp;&nbsp; onclick="slidePanel('menu_block1')"这个事件函数将在我们点击面板标题时触发，能后会调用Scriptaculous Effect的具体实现去实现我们需要的滑动折叠功能。<br><br>&nbsp;&nbsp;&nbsp; 这个效果只是八行代码，比较简单，但是它用到了Scriptaculous Effect类库，Scriptaculous Effect又简接用到了Prototype类库，所以，传统方式使用起来还是比较复杂，有一堆脚本需要导入prototype.js，effects.js，builder.js，更加痛苦的是这些脚本的导入还要遵守一定的顺序。<br><br>&nbsp;&nbsp;&nbsp; 但是，如果我们使用JSI 明确申明了这些依赖，那么使用起来就简单多了，只一个import就可以完全搞定。<br>&nbsp;&nbsp;&nbsp; 此外 这里还有一个额外的好处，我们类库中依赖的那些脚本，并不会对外部保露，在页面上是不可见的，也就是说，这些依赖完全终结在刚才编写的类库中，不必担心使用这些类库带来的名称污染问题。<br><br><br>
<h2>环境隔离</h2>
&nbsp;&nbsp;&nbsp; 众所周知， Scriptaculous所依赖的Prototype库与jQuery存在冲突。所以同时使用比较困难。<br>&nbsp;&nbsp;&nbsp; 下面的例子，我们将在同一个页面上同时使用Scriptaculous和 jQuery 类库。示范一下JSI隔离冲突功能。<br>示例页面（hello-jquery-aculo.html）：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;加入引导脚本&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入jQuery</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">org.jquery.$</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入Scriptaculous</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">us.aculo.script.Effect</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);<br><br>$(document).ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){<br>&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用jQuery添加一段问候语</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;$(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;p&nbsp;id='helloBox'&nbsp;style='background:#0F0;text-align:center;font-size:40px;cursor:pointer;'&gt;\<br>Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous&lt;/p&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;.appendTo('body');<br>&nbsp;&nbsp;$('#helloBox').ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用Scriptaculous高亮显示一下刚才添加的内容</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;Effect.Highlight('helloBox');<br>&nbsp;&nbsp;}).click(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">当用户单击该内容后使用jQuery实现渐出</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$('#helloBox').fadeOut();<br>&nbsp;&nbsp;});<br>&nbsp;});<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">文档装载后，jQuery将在后面添加一段问候语；并使用Scriptaculous高亮显示（Highlight）；在鼠标点击后在使用jQuery渐出（fadeOut）。</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></div>
<br><br><br><br>
<h2>其他话题</h2>
&nbsp;&nbsp;&nbsp; JSI组件模型：<br>&nbsp;&nbsp;&nbsp; 页面装饰引擎：用于装饰朴素html元素的框架，实现零脚本代码的web富客户端编程，更多细节请访问jsi官方网站。<br><br><br>
<h2>参考：</h2>
&nbsp;&nbsp;&nbsp; 脚本导入函数<br>&nbsp;&nbsp;&nbsp; 脚本导入函数是JSI唯一的一个在页面上使用的系统函数。<br><br>&nbsp; function $import(path, callbackOrLazyLoad, target )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path 类库路径<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callbackOrLazyLoad 可选参数,如果其值为函数，表示异步导入模式；如果其值为真，表示延迟同步导入模式，否则为即时同步导入（默认如此）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Target 可选参数(默认为全局变量,所以说,这种情况等价于直接声明的全局变量)，指定导入容器。<br>名词解释：<br>&nbsp;&nbsp;&nbsp; * 自由脚本<br>通过&lt;script&gt;标记引入或直接编写的脚本，我们不建议在使用JSIntegration之后，仍旧使用script src导入JSI启动脚本(boot.js)之外的脚本。<br>&nbsp;&nbsp;&nbsp; * 托管脚本<br>通过$import函数直接或间接加载的脚本。这些脚本将在一个独立的执行上下文装载，不会污染全局环境。<br>&nbsp;&nbsp;&nbsp; * 脚本依赖<br>若要使用A，需要导入B，则A依赖B。<br>A、B可以是脚本文件，也可以是脚本文件中的某个脚本元素。<br>&nbsp;&nbsp;&nbsp; * 类库使用者<br>类库的使用者，您只需再页面上书写脚本，导入类库，编写自己的简单脚本，一般情况请不要编写js文件，那是类库开发者做的事.<br>&nbsp;&nbsp;&nbsp; * 类库开发者<br>在此框架下开发出方便实用的脚本库，您需要编写一些通用脚本，同时设置脚本依赖，做到任何类/函数，导入即可运行。<br><br><br>    <img src ="http://www.blogjava.net/jindw/aggbug/121484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-02 14:16 <a href="http://www.blogjava.net/jindw/archive/2007/06/02/121484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>