﻿<?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-我爱佳娃-随笔分类-AJAX</title><link>http://www.blogjava.net/alwayscy/category/18990.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 04 Mar 2008 08:58:45 GMT</lastBuildDate><pubDate>Tue, 04 Mar 2008 08:58:45 GMT</pubDate><ttl>60</ttl><item><title>DWR+JPA: DWR直接访问SERVICE层，并直接处理DAO返回的BEAN</title><link>http://www.blogjava.net/alwayscy/archive/2008/03/03/183379.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Mon, 03 Mar 2008 12:59:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2008/03/03/183379.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/183379.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2008/03/03/183379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/183379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/183379.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 当我们写好SERVICE层的MANAGER方法后，就已经完成业务逻辑，可以用DWR从BROWSER直接调用，不必要再写一个“缓冲层”，这样的好处是避免了今后对SERVICE层的多处同时改动。&nbsp;&nbsp;<a href='http://www.blogjava.net/alwayscy/archive/2008/03/03/183379.html'>阅读全文</a><img src ="http://www.blogjava.net/alwayscy/aggbug/183379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2008-03-03 20:59 <a href="http://www.blogjava.net/alwayscy/archive/2008/03/03/183379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR Reverse Ajax功能实践的要点</title><link>http://www.blogjava.net/alwayscy/archive/2007/11/01/157552.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Thu, 01 Nov 2007 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/11/01/157552.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/157552.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/11/01/157552.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/157552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/157552.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Reverse Ajax主要是在BS架构中，从服务器端向多个浏览器主动推数据的一种技术。应用范围广泛。<br>本文就DWR使用中，代码组织、声明做了说明。并解决了在非DWR线程中，WebContextFactory.get()返回空的问题。&nbsp;&nbsp;<a href='http://www.blogjava.net/alwayscy/archive/2007/11/01/157552.html'>阅读全文</a><img src ="http://www.blogjava.net/alwayscy/aggbug/157552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-11-01 17:35 <a href="http://www.blogjava.net/alwayscy/archive/2007/11/01/157552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最好用的JS编辑器：JSEclipse及YUT-EXT库的智能代码完成功能</title><link>http://www.blogjava.net/alwayscy/archive/2007/09/13/144971.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Thu, 13 Sep 2007 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/09/13/144971.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/144971.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/09/13/144971.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/144971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/144971.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在Eclipse的Software Updates/Find and Install&#8230;中点New Remote Site&#8230;填入：  </p>
<p><a title="http://download.macromedia.com/pub/labs/jseclipse/autoinstall/site.xml" href="http://download.macromedia.com/pub/labs/jseclipse/autoinstall/site.xml">http://download.macromedia.com/pub/labs/jseclipse/autoinstall/</a>  </p>
<p><img src="http://www.blogjava.net/images/blogjava_net/alwayscy/WindowsLiveWriter/JSJSEclipseYUTEXT_129B7/clip_image002%5B4%5D.jpg" height="451" width="585"  alt="" /> </p>
<p>&nbsp; </p>
<p>安装JSEclipse完成后。  </p>
<p>如果你用EXT库的话，再把完整的库，<a href="http://extjs.com/forum/showthread.php?t=6112">点这里</a>  </p>
<p>拷贝到这里，注意user_library需要自己创建，另外，是不要带解压目录，而是所有的XML文件直接拷入：  </p>
<p>E:\myeclipse\workspace\.metadata\.plugins\com.interaktonline.jseclipse\user_library</p>
<img src ="http://www.blogjava.net/alwayscy/aggbug/144971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-09-13 21:14 <a href="http://www.blogjava.net/alwayscy/archive/2007/09/13/144971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在dojo的TreeV3中实现动态的上下文菜单TreeContextMenuV3</title><link>http://www.blogjava.net/alwayscy/archive/2007/07/01/127338.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Sun, 01 Jul 2007 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/07/01/127338.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/127338.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/07/01/127338.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/127338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/127338.html</trackback:ping><description><![CDATA[<p>dojo提供了不错的树控件，但上下文菜单比较简单，不能动态改变：比如我想根据不同节点显示不同的上下文菜单就比较困难，根据多种实验和查阅下面提供一种实现方式。在此过程中也学到不少东西。先把解决方案说一下，再把发现过程说一下：<br><br>DOJO提供了AOP的方式来&#8220;注入&#8221;代码，我们就把修改menu的代码注入到TreeContextMenuV3里就可以了：<br>在open事件前注入我们的代码：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">dojo.event.connect(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">before</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">contextMenu1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">onContextMenuOpen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>
<p>注意before是表示在menu打开之前调用，其它关键字还可以是after,around。强，赞一个!<br><br>在onContextMenuOpen函数中，做改变菜单的事情：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_41_695_Open_Image onclick="this.style.display='none'; Codehighlighter1_41_695_Open_Text.style.display='none'; Codehighlighter1_41_695_Closed_Image.style.display='inline'; Codehighlighter1_41_695_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_41_695_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_695_Closed_Text.style.display='none'; Codehighlighter1_41_695_Open_Image.style.display='inline'; Codehighlighter1_41_695_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.onContextMenuOpen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;(evt)&nbsp;</span><span id=Codehighlighter1_41_695_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_41_695_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">before&nbsp;context&nbsp;open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(evt);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;m&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">contextMenu1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(m);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.removeChild&nbsp;(dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">treeContextMenuEdit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.removeChild&nbsp;(dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">treeContextMenuDown</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.removeChild&nbsp;(dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">treeContextMenuCreate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.removeChild&nbsp;(dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">treeContextMenuCreate2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_460_621_Open_Image onclick="this.style.display='none'; Codehighlighter1_460_621_Open_Text.style.display='none'; Codehighlighter1_460_621_Closed_Image.style.display='inline'; Codehighlighter1_460_621_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_460_621_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_460_621_Closed_Text.style.display='none'; Codehighlighter1_460_621_Open_Image.style.display='inline'; Codehighlighter1_460_621_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.context_menu[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MenuItem2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">])&nbsp;</span><span id=Codehighlighter1_460_621_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_460_621_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_512_533_Open_Image onclick="this.style.display='none'; Codehighlighter1_512_533_Open_Text.style.display='none'; Codehighlighter1_512_533_Closed_Image.style.display='inline'; Codehighlighter1_512_533_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_512_533_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_512_533_Closed_Text.style.display='none'; Codehighlighter1_512_533_Open_Image.style.display='inline'; Codehighlighter1_512_533_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dojo.widget.createWidget(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MenuItem2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span id=Codehighlighter1_512_533_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_512_533_Open_Text><span style="COLOR: #000000">{caption:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Page&nbsp;Info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(id);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.context_menu[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MenuItem2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;id;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.addChild(id);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">m.destroyChildren&nbsp;();</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(m);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">w.destory&nbsp;();</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;</span></div>
<p><br>在这里可以根据节点来增删菜单项了，context_menu成员是用来记录加入过的菜单项，以免重复加入。<br>另外，removeChild没有destory掉菜单项，应该可以重复使用。所以，我设想的实现是，在程序开头将所有可能的菜单项动态创建好，存在一个MAP中，然后，在这里来动态加删它们。<br><br><br>下面是寻找解决方法的过程：<br><br>刚开始时，我想是改变整个树的菜单，确实也找到了可以编程改变它的方法：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;ctxMenu&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">contextMenu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;tree&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dojo.widget.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">phyTree</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>dojo.log.info&nbsp;(ctxMenu);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>ctxMenu.listenTree(tree);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>ctxMenu.bindDomNode(tree.domNode);&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>关键是一句：bindDomNode。<br>这样虽然可以动态&#8220;加载&#8221;菜单了，可是没有&#8220;时机&#8221;来加载新菜单，无法达到根据节点变化来做改变。<br><br><br>随后，我又想到重载，去创造这个&#8220;时机&#8221;：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">dojo.require&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dojo.widget.TreeContextMenuV3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>dojo.provide(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mywidgets.MyTreeContextMenu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>dojo.widget.defineWidget(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;widget&nbsp;name&nbsp;and&nbsp;class</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mywidgets.MyTreeContextMenu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;superclass</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[dojo.widget.TreeContextMenuV3],<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_243_291_Open_Image onclick="this.style.display='none'; Codehighlighter1_243_291_Open_Text.style.display='none'; Codehighlighter1_243_291_Closed_Image.style.display='inline'; Codehighlighter1_243_291_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_243_291_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_243_291_Closed_Text.style.display='none'; Codehighlighter1_243_291_Open_Image.style.display='inline'; Codehighlighter1_243_291_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;</span><span id=Codehighlighter1_243_291_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_243_291_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">my&nbsp;context&nbsp;menu&nbsp;create1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;properties&nbsp;and&nbsp;methods</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_325_670_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_670_Open_Text.style.display='none'; Codehighlighter1_325_670_Closed_Image.style.display='inline'; Codehighlighter1_325_670_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_325_670_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_670_Closed_Text.style.display='none'; Codehighlighter1_325_670_Open_Image.style.display='inline'; Codehighlighter1_325_670_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_325_670_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_325_670_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_346_667_Open_Image onclick="this.style.display='none'; Codehighlighter1_346_667_Open_Text.style.display='none'; Codehighlighter1_346_667_Closed_Image.style.display='inline'; Codehighlighter1_346_667_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_346_667_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_346_667_Closed_Text.style.display='none'; Codehighlighter1_346_667_Open_Image.style.display='inline'; Codehighlighter1_346_667_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open:&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;</span><span id=Codehighlighter1_346_667_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_346_667_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dojo.widget.PopupMenu2.prototype.open.apply(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">,&nbsp;arguments);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.log.info&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">my&nbsp;context&nbsp;menu&nbsp;create</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_519_645_Open_Image onclick="this.style.display='none'; Codehighlighter1_519_645_Open_Text.style.display='none'; Codehighlighter1_519_645_Closed_Image.style.display='inline'; Codehighlighter1_519_645_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_519_645_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_519_645_Closed_Text.style.display='none'; Codehighlighter1_519_645_Open_Image.style.display='inline'; Codehighlighter1_519_645_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.children.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_519_645_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_519_645_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_525_545_Open_Image onclick="this.style.display='none'; Codehighlighter1_525_545_Open_Text.style.display='none'; Codehighlighter1_525_545_Closed_Image.style.display='inline'; Codehighlighter1_525_545_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_525_545_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_525_545_Closed_Text.style.display='none'; Codehighlighter1_525_545_Open_Image.style.display='inline'; Codehighlighter1_525_545_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_525_545_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_525_545_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;notify&nbsp;children&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_582_640_Open_Image onclick="this.style.display='none'; Codehighlighter1_582_640_Open_Text.style.display='none'; Codehighlighter1_582_640_Closed_Image.style.display='inline'; Codehighlighter1_582_640_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_582_640_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_582_640_Closed_Text.style.display='none'; Codehighlighter1_582_640_Open_Image.style.display='inline'; Codehighlighter1_582_640_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.children[i].menuOpen)&nbsp;</span><span id=Codehighlighter1_582_640_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_582_640_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.children[i].menuOpen(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getTreeNode());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>这也是我第一次重载DOJO，发现其实很简单，关键要注意它的namespace：<br>dojo.require()语句的寻找方法是：<br>dojo.xxx =&gt; dojo/src/xxx.js<br><br>dojo.xxx.yyy =&gt; dojo/src/xxx/yyy.js<br><br>dojo.xxx.yyy.zzz =&gt; dojo/src/xxx/yyy/zzz.js<br><br>如果遇到不是dojo开头时，它的寻找方法是：<br>example.xxx =&gt; dojo/../example/xxx.js<br><br>example.xxx.yyy =&gt; dojo/../example/xxx/yyy.js<br><br>example.xxx.yyy.zzz =&gt; dojo/../example/xxx/yyy/zzz.js<br><br>所以要把自己的代码放到跟dojo同级就可以了。<br>这个办法我没往下试，因为重载的是contextmenu，在它里面把它&#8220;整个自己&#8221;换成别的menu，我觉得是不可行的。而看半天代码也没找着在哪重载右键点击这个事件。不过启发我可以更换子item来解决。<br>于是有了开头的解决方案。</p>
<img src ="http://www.blogjava.net/alwayscy/aggbug/127338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-07-01 11:15 <a href="http://www.blogjava.net/alwayscy/archive/2007/07/01/127338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态修改dojo的TreeNodeV3图标</title><link>http://www.blogjava.net/alwayscy/archive/2007/06/02/121475.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Sat, 02 Jun 2007 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/06/02/121475.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/121475.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/06/02/121475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/121475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/121475.html</trackback:ping><description><![CDATA[<p>最近通过搜索发现建立TreeV3时候，方便的加载图标方法：<a href="http://www.blogjava.net/alwayscy/archive/2007/06/01/121395.html">在这里</a></p> <p>&nbsp;</p> <p>但是有个问题，想在程序里动态修改它却没有函数，经过研究代码发现可以用如下简单方法实现：</p> <p>取得之前定义的TreeDocIconExtension的引用：</p> <p>var treeicons = dojo.widget.manager.getWidgetById("phyTreedocIcons"); <p>&nbsp; <p>改变TreeNodeV3的TYPE值为CSS文件定义过的项目： <p>node.nodeDocType = 3; <p>&nbsp; <p>最关键是要去刷新iconNode的innerHTML，调用如下： <p>treeicons.setnodeDocTypeClass (node); <p>&nbsp; <p>已经实验通过。这样就可以方便的根据后台数据刷新节点状态，而不必重建树节点。</p><img src ="http://www.blogjava.net/alwayscy/aggbug/121475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-06-02 12:06 <a href="http://www.blogjava.net/alwayscy/archive/2007/06/02/121475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给dojo的v3 tree加icon图标</title><link>http://www.blogjava.net/alwayscy/archive/2007/06/01/121395.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Fri, 01 Jun 2007 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/06/01/121395.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/121395.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/06/01/121395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/121395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/121395.html</trackback:ping><description><![CDATA[<p></p> <p>转录自：<a href="http://www.javaeye.com/post/172621">这里</a> <p>并实验通过。 <p>&nbsp; <p>TreeV3支持节点图标, 因为和老版本的使用方式大相径庭, 而且没有文档, 所以给升级到V3的developer造成一定的困扰. 我利用google, 并分析了源代码后找到了方法. <br>在TreeV3中加入图标的方法如下: <p>首先定义一个widget: <br>&lt;div dojoType="TreeDocIconExtension" widgetId="docIcons"&gt;&lt;/div&gt; <p>并给tree加入一个名为"docIcons"的listener: <br>&lt;div dojoType="TreeV3" listeners="link;selector;docIcons;treeController;menu"&gt; <p>在定义节点时需要加入一个属性"<b>nodeDocType</b>", 如: <br>&lt;div dojoType="TreeNodeV3" title="nodetitle" <b>nodeDocType="nodetype1"</b> &gt;&lt;/div&gt; <p>最后给每一个nodedoctype定义一个名为".TreeIconXXXX"的style, 这里的XXXX就是给节点定义的nodeDoctype的名字: <br>&lt;style&gt; <br>.TreeIcon<b>nodetype1</b>{ <br>background-image: url('icon.gif'); <br>} <br>&lt;/style&gt;</p><img src ="http://www.blogjava.net/alwayscy/aggbug/121395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-06-01 17:37 <a href="http://www.blogjava.net/alwayscy/archive/2007/06/01/121395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX(JAVASCRIPT编程)也要讲程序结构--MVC结构在JS中的应用</title><link>http://www.blogjava.net/alwayscy/archive/2007/05/26/120142.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Sat, 26 May 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/05/26/120142.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/120142.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/05/26/120142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/120142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/120142.html</trackback:ping><description><![CDATA[随着AJAX的普遍应用，客户端的开发也要走向面向对象，面向模式的开发范畴。<br>看到一篇文章(附文链接见后)，着重归纳一种开发模式：<br><br>一页就是一个&#8220;应用程序&#8221;，一个系统可能有好几个这样的应用程序；<br>用JSF或者STRUTS形成各&#8220;应用程序&#8221;的第一页；<br>其中，每一页含有：<br>controller.js负责：(这是CONTROLLER)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接来自页面的调用，通过AJAX封装包(如JSON-RPC或者DWR)调用系统服务；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为要异步响应，需要安排CALLBACK；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在CALLBACK中，调用VIEW及MODEL的维护<br><br>datacopy.js负责：(这是MODEL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存数据模型，并由CONTROLLER来更新<br><br>render.js负责：(这是VIEW)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;听从CONTROLLER调用，通过取MODEL的数据，建立widgets，刷新页面<br><br>原文来自，<a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0606_barcia/0606_barcia.html">这里</a>。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>另外，有关JS的面向对象编程&lt;&lt;javascript权威指南&gt;&gt;一书讲的相当不错，我简单的与C++比较了一下，<a href="http://www.blogjava.net/alwayscy/archive/2007/05/13/117140.html">请点这里。<br></a>
<img src ="http://www.blogjava.net/alwayscy/aggbug/120142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-05-26 10:56 <a href="http://www.blogjava.net/alwayscy/archive/2007/05/26/120142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX框架/库比较和选择：ECHO2, GWT, DOJO, PROTOTYPE, JQUERY</title><link>http://www.blogjava.net/alwayscy/archive/2007/01/05/92041.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Fri, 05 Jan 2007 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2007/01/05/92041.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/92041.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2007/01/05/92041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/92041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/92041.html</trackback:ping><description><![CDATA[看了几篇中英文的AJAX库/框架比较文章，为方便选择使用，特归纳如下：<br />首先，要在两个类别中选择，一个是编译类，一个是非编译类别。<br />Echo2/GWT是将JAVA代码编译成JAVASCRIPT，乍看很方便，不用掌握JS也能做出炫目界面。但这只适于不会或者不想了解JS的情况，对于还是想完全控制和定制界面的项目就不适合。<br />另外，有一种观点认为JAVA-&gt;JS转换是一种低级语言向高级语言转换，本身没有意义。有点像去学汇编，然后再找个工具把汇编语言代码转换成C代码来用。我虽然没完全想通这个观点，不过，我一直用C/C++，这几年才逐渐发现JAVA确实是一种进化。没准别人说的是对的呢？<br />在Echo2和GWT中，GWT大部分工作是在客户端，尽量少跟SERVER打交道，适合大型网站运用；ECHO2信奉“用到才加载”的信条，所以会有大量向SERVER的访问，适合企业应用。另外，个人觉得ECHO2是个更全面的的一站式框架，界面也非常炫。但它的开发工具要收费。<br />再谈非编译类别，它们包括DOJO、PROTOTYPE、JQEURY，下面一一介绍：<br />先说PROTOTYPE，它比较轻量极，能让你的代码更加简化。最经典莫过于“美圆函数”：<br />document.getElementById(’elementid’) 变成$(’elementid’)<br />它加强了JS语言的可开发性，降低了学习JS的门槛。<br />DOJO最吸引人的是它的事件系统和丰富的可定制组件。它可以用形如下面的语句为各种HTML元素加入事件：<br />dojo.event.connect(someNode, "onclick", doStuff); <br />正由于DOJO提供了强大功能，它分成了许多包，可以分别包含使用。<br />JQUERY也提供了美圆函数，它的插件系统也提供象DOJO的组件，但它没有PROTOTYPE那样简洁，也没有DOJO这么多的组件供使用，但它兼收两家优点，并且个头不大，文档也算完整，所以说它介乎于前述两者之间。 <br />所以，如果你需要非常完整的工具组件请用DOJO，如果你想优化你的JS代码，提高书写技巧请用PROTOTYPE，如果你想两者兼顾就用JQUERY。<img src ="http://www.blogjava.net/alwayscy/aggbug/92041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2007-01-05 17:24 <a href="http://www.blogjava.net/alwayscy/archive/2007/01/05/92041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>