﻿<?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-随笔分类-JavaScript</title><link>http://www.blogjava.net/jindw/category/22725.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>Sun, 14 Oct 2007 20:31:10 GMT</lastBuildDate><pubDate>Sun, 14 Oct 2007 20:31:10 GMT</pubDate><ttl>60</ttl><item><title>运动曲线研究(缓动效果)</title><link>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sun, 14 Oct 2007 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/152793.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/152793.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/152793.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 刚刚学习了一下网页动画中上的缓动效果，分享一下学习心得。缓动曲线的概念：缓动曲线是一个0为起点的连续函数曲线，x轴表示时间变化，y轴表示位移变化。曲线的斜率反映出运动的数度。缓动效果在Flash动画中比较常见，用于模拟一些现实中常见的运动轨迹，或者制造一些超绚的效果。而且新版本的Flash中，内置了一些常用的缓动曲线函数。可惜,Flash的这些曲线函数不是开源的...&nbsp;&nbsp;<a href='http://www.blogjava.net/jindw/archive/2007/10/14/152793.html'>阅读全文</a><img src ="http://www.blogjava.net/jindw/aggbug/152793.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-10-14 21:14 <a href="http://www.blogjava.net/jindw/archive/2007/10/14/152793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> JSA在线压缩程序发布</title><link>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 22 Aug 2007 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/138646.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/138646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/138646.html</trackback:ping><description><![CDATA[<p><a href="http://www.xidea.org/project/jsa/" target="blank">JSA</a>这个压缩工具，是java编写的，需要安装java运行环境。
<br>这多少给一些非jav程序员带来点不便。</p>
<p>现在我们发布servlet在线压缩版本。无需安装，在线压缩，给非Java用户一个更加便捷的使用方式。</p>
<p>项目主页：<a href="http://www.xidea.org/project/jsa/" target="blank">http://www.xidea.org/project/jsa/</a>
<br>现在的在线压缩服务器由<a href="http://blog.eaxi.com/" target="blank">Seaprince</a>提供。
<br>欢迎更多有空闲服务器资源的朋友安装JSA在线服务，我将在jsa项目主页提供链接，方便大家使用。</p>
<p>仍外，为了避免服务器资源被恶意滥用，我们默认启用了图片验证，服务频率限制等保护设置。
<br>给用户带来些不便，敬请谅解。</p>
<br><img src ="http://www.blogjava.net/jindw/aggbug/138646.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-08-22 16:28 <a href="http://www.blogjava.net/jindw/archive/2007/08/22/138646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本装载时一个似乎应该有所重视的问题。 </title><link>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sun, 12 Aug 2007 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/136244.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/136244.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/136244.html</trackback:ping><description><![CDATA[<p>今天无意间打开了一个CSDN上的个人blog，发现窗口无法拖动，Firefox的标签页也无法切换。</p>
<p>查看代码：
<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: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">Include(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">Csdn.Blog.UserOnline</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);</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;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">Include(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">Csdn.Blog.ShowmeDataDeal</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></div>
<p>&#160;</p>
<script>render_code();</script>
看到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: #008000;">//</span><span style="color: #008000;">http://blog.csdn.net/scripts/jsframework.js&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">window.Include</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(namespace,&nbsp;path)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;<br>};&nbsp;&nbsp;<br>S.load</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(namespace,&nbsp;path)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<br><script>render_code();</script>
<p>仔细阅读这两个函数代码，发现它是通过XMLHttpRequest对象同步装载脚本资源的（对IE，它采用userdata缓存优化）。而这必将导致一种完全阻塞问题（这种问题我在仍外一篇blog上描述过：<a href="http://jindw.javaeye.com/blog/66702" target="blank">http://jindw.javaeye.com/blog/66702</a>）。</p>
<p><strong style="color: red;">说到阻塞问题，我想大家可能会以为只是一种下载延迟，其实不然。</strong><span style="color: red;">
</span><br>下载延迟不是完全阻塞，浏览器依然可以响应用户事件。而同步XHR请求阻塞是一种完全的阻塞。
<br>浏览器在脚本运行与事件响应共用同一个线程（我的猜测）。任何脚本尚在运行时（包括被同步XHR请求阻塞的时间），浏览器将无法响应任何用户事件（无法拖放窗口、切换标签、重画页面等等，就像程序死了一样）。与普通的下载延迟造成的阻塞，感觉明显不同。</p>
<p>我对这个问题可以说深有体会，起初，在构建JSI1的项目站点时。因为网站放在sourceforge上，访问数度不是一般的慢，几个简单的例子，浏览器就要完全阻塞好几妙钟。正是厌恶这种完全阻塞的现象，我才开发了JSI2。</p>
<p>事实上，现在的一堆堆js框架中，采用XHR同步装载资源的有不少，JSVM、dojo、a9engine、hax的pies；其中JSVM，
dojo都提供打包工具，将可能装载的脚本打包到启动文件中，所以也可以避免XHR同步请求。不过这样也就失去了部分动态装载的意义了。</p>
<p>总之，我非常讨厌这种完全阻塞现象，认为这个严重影响用户体验。
<br>可能也有些主观因素把，希望听听大家的看法。
</p>
<br> <img src ="http://www.blogjava.net/jindw/aggbug/136244.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-08-12 22:22 <a href="http://www.blogjava.net/jindw/archive/2007/08/12/136244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS几处怪癖的语义</title><link>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sat, 30 Jun 2007 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/127243.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/127243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/127243.html</trackback:ping><description><![CDATA[<p><strong>带ID的函数表达式：
<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;"><strong>var</strong></span><span style="color: #000000;"><strong>&nbsp;fn&nbsp;</strong></span><span style="color: #000000;"><strong>=</strong></span><span style="color: #000000;"><strong>&nbsp;</strong></span><span style="color: #0000ff;"><strong>function</strong></span><span style="color: #000000;"><strong>&nbsp;fnid(){};&nbsp;&nbsp;</strong></span></div>
</strong></p>
<script>render_code();</script>
<p>按照ECMA262定义,上面这段脚本等价于：
</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: #0000ff;">with</span><span style="color: #000000;">({fnid:</span><span style="color: #0000ff;">null</span><span style="color: #000000;">}){&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;fn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fnid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){};&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>
<br>注意：fnid在with外是不可见的，但是IE没有严格遵守ECMA规范(同样的情况发生在catch语法上)。在IE上相当于：
<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;fnid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){};&nbsp;&nbsp;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;fn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fnid;&nbsp;&nbsp;</span></div>
<br>
<script>render_code();</script>
<p>在刚刚发布的JSA1beta上，还不能处理这个问题（新版本将这周内发布）。同时，鉴于这种语法在不同浏览器上表现不同，还是建议尽量避免使用（这点上，我个人还是更喜欢ie的方式）。</p>
<p><strong>var语句：</strong>
<br>太常用了，但是，没有注意还是很容易出问题。
<br>var 用来声明全局或函数变量，但是，只是申明，重复申明也不能置空，范围是函数或者全局空间，位置在函数或脚本顶端，与块无关，这些与常用高级语言区别很大。</p>
<p>怪癖的代码
<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: #0000ff;">var</span><span style="color: #000000;">&nbsp;vaiable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;test(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;variable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">别担心，不会改动全局变量vaiable&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">do&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;vaiable;</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;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>
<p>常见错误有：
<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: #0000ff;">var</span><span style="color: #000000;">&nbsp;flag;</span><span style="color: #008000;">//</span><span style="color: #008000;">这里可能有人（包括我自己）喜欢自做聪明的利用一下变量的初始值undefined&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">while</span><span style="color: #000000;">(!flag){</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;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">}&nbsp;&nbsp;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>  <img src ="http://www.blogjava.net/jindw/aggbug/127243.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-30 16:47 <a href="http://www.blogjava.net/jindw/archive/2007/06/30/127243.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>[导入]再谈一下DOMContentLoad事件</title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126018.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126018.html</trackback:ping><description><![CDATA[<p>这个问题算是个老问题了。
<br>所以，标题加上一个再字。</p>
<p>我主要说一下模拟这个事件时候容易出现的问题。</p>
<p>对于FF，Opera9，原生DOMContentLoad支持，就不说了，最头疼的是IE。
<br>我最初考虑这个问题的时候，想到的是document的readyState属性。
<br>偷窥一下Dojo的源码，发现它也是基于这个属性去做的，那时，我基本就认准了这个方法。
<br>于是再后来JSI1和JSI2早期的预览版本中，都是基于这个属性做的，后来，有个朋友向我反应，说JSI的装饰引擎在IE上启动比FF慢很多，我当时就猜测，是否是这个DOMContentLoad的问题。</p>
<p>经过测试，发现，确实，readyState必须等待图片装载完成之后才能置为complete。
<br>于是到网上搜索一下其他办法，最终 Dean Edwards的blog上描述的一个基于script defer属性的解决办法胜出：http://dean.edwards.name/weblog/category/dom/onload/
<br>不过，使用document.write打印一段脚本，我真的不喜欢：（</p>
<p>在评论里面我们可以看到一些其他的建议，有人认为 readyState == 'complete' 加
readyState==&#8216;interactive&#8217;这个状态可以准确模拟DOMContentLoad。我开始简单测试一下，貌似可行，但是后来发现
readyState==&#8216;interactive&#8217;可能受alert等函数影响，就是说，一般情况下，readyState==
&#8216;interactive&#8217;时，dom是装载完了的，但是，当你文档装载过程中，调用了alert函数，那么，readyState将提前置为
&#8216;interactive&#8217;。</p>
<p><strong>总之，目前来说，我知道的，只有两个办法可以真正实现IE上模拟DOMContentLoad </strong>
<br></p>
<ul>1.htc ondocumentready（需要额外的HTC文件）
    <br>2.script defer(必须使用document.write打印一段脚本标记,jquery目前采用的方式)
    <br></ul>
    <br><strong>最常见的一个错误：</strong>
    <br>
    <ul>document.readyState(Dojo目前（0.4.1）采用的方式)
        <br></ul>
        <p>再说一下JSI的DOMContentLoad实现的使用接口。</p>
        <p><a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html?{cmd:'genObject',args:['EventUtil','js.html']}#EventUtil.addDOMReadyListener">js.html.EventUtil.addDOMReadyListener(&lt;Function&gt;listener ,&lt;boolean&gt;runAnyCase )</a></p>
        <p>第二个参数用于确保listener 在任何时候都会被调用（FF DOMContentLoad事件如果在事件发生之后设置listener是无效的）
        </p><img src ="http://www.blogjava.net/jindw/aggbug/126018.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:13 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126018.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>貌似Opera的一个bug</title><link>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 20 Jun 2007 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125422.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125422.html</trackback:ping><description><![CDATA[今天抽空测试了一下JSI当前状态的浏览器兼容性，一个头疼的问题困扰了很久。<br>找出问题出自，怀疑是一个opera的bug。<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;">function</span><span style="color: #000000;">&nbsp;test(x){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(x){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(e){<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;}<br>}</span></div>
<br>语法检查就通不过，报告错误：<br>le://localhost/D:/eclipse/workspace/JSI/web/scripts/core.js<br>Event thread: BeforeExternalScript<br><br>opera8报错，opera9好像就没有这个问题。<br>贴出来，让有类似问题的人省点心。<br> <img src ="http://www.blogjava.net/jindw/aggbug/125422.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-20 21:42 <a href="http://www.blogjava.net/jindw/archive/2007/06/20/125422.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>用正则在Eclipse上对javascript批量缩进。</title><link>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 08 Jun 2007 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122803.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122803.html</trackback:ping><description><![CDATA[&nbsp; 一直没有找到好用的 javascript格式化工具，不过UE有个非常漂亮的功能，多行编辑，可以轻松的批量缩进。<br>&nbsp; 但是eclipse呢？很遗憾，没有，不过用正则表达式可以轻松完成这个功能，匹配整行，替换时在行前加上缩进空格。<br><br>find：^.*<br>replace With：&nbsp; $0<br><br>说到这个正则，鄙视一下js的正则语法，居然匹配组是 $1 $2 $3 ....索引从1开始，但是匹配全部为什么要来个$&amp;?&nbsp; 多么难记？？还是eclipse的$0方便<br>而且js的match函数返回的数组还是 [全匹配,组1，组2....]，全匹配索引就是0嘛！ 居然要来个$&amp;??<br>扼杀我们的联想天性。<br><br><img src ="http://www.blogjava.net/jindw/aggbug/122803.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 11:33 <a href="http://www.blogjava.net/jindw/archive/2007/06/08/122803.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/07/122635.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 07 Jun 2007 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/07/122635.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122635.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/07/122635.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122635.html</trackback:ping><description><![CDATA[今天和网友聊起在javascript里面实现DateFormat 的话题。<br><br>把想法发布一下，当是笔记。<br><br>格式化：<b