<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://dengyin2000.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdengyin2000.spaces.live.com%2fcategory%2fjavascript%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Java Dreams: javascript</title><description /><link>http://dengyin2000.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catjavascript</link><language>en-US</language><pubDate>Sat, 02 Aug 2008 01:08:53 GMT</pubDate><lastBuildDate>Sat, 02 Aug 2008 01:08:53 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://dengyin2000.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-5815636772130029849</live:id><live:alias>dengyin2000</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Dojo TreeV3使用详解</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry</link><description>&lt;h2&gt;
    &lt;span style="font-weight:bold"&gt; Dojo TreeV3使用详解&lt;/span&gt;
  &lt;/h2&gt;
  &lt;div style="text-align:center"&gt;
                                                 
    作者：邓胤(deng.yin@gmail.com)&lt;br&gt;
  &lt;/div&gt;
  &lt;br&gt;
  
       
    工作中使用了TreeV3这个dojo的组件，感觉基本上已经是把dojo的treeV3使用到了极点（自定义树的外观，树节点的拖拉，把其他Drag
    Source拖拉到树中），公司也要求我作个treeV3演说。所以特意把这篇文章写下来。&lt;br&gt;
    &lt;br&gt;
        首先先对treeV3做一个简单的介绍。TreeV3.js, TreeNodeV3.js,
    .TreeBasicControllerV3.js,
    TreeContextMenuV3.js,TreeDndControllerV3.js,TreeEditor.js,
    主要的就是这些js一起协作。有兴趣的可以看看源码，
    其实dojo的代码看起来还算是瞒简单的。下面我就用几个例子来说明怎样扩展或自定义TreeV3。本篇文章是增对有一定dojo知识的读者，如果你现在还不了解dojo，请看&lt;br&gt;
    http://dojotoolkit.org/.&lt;br&gt;
    &lt;br&gt;
        &lt;font size=4&gt;1.  为叶子节点增加图标。&lt;/font&gt;&lt;br&gt;
           IconTree.html&lt;br&gt;
          &lt;br&gt;
    &lt;div&gt;
      &amp;lt;div dojoType=&amp;quot;TreeV3&amp;quot; listeners=&amp;quot;controller&amp;quot;&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 1&amp;quot;
      widgetId=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 1.1&amp;quot; widgetId=&amp;quot;Item 1.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 1.2&amp;quot; widgetId=&amp;quot;Item 1.2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 2&amp;quot;
      widgetId=&amp;quot;Item 2&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 2.1&amp;quot; widgetId=&amp;quot;Item 2.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Empty Folder&amp;quot;
      isFolder=&amp;quot;true&amp;quot; widgetId=&amp;quot;Item 3&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 4&amp;quot; widgetId=&amp;quot;Item 4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
    &lt;/div&gt;
        我们在每个TreeNode上加上childIconSrc属性。请看icontree.js怎样让这个属性生效的。&lt;br&gt;
        icontree.js&lt;br&gt;
    
      dojo.lang.extend(dojo.widget.TreeNodeV3, {&lt;br&gt;
          childIconsrc: &amp;quot;&amp;quot;,&lt;br&gt;
          childIcon: null,&lt;br&gt;
          iconNode:null,&lt;br&gt;
          titleNode:null,&lt;br&gt;
          postCreate: function(args) {&lt;br&gt;
          //build icon&lt;br&gt;
              if (args[&amp;quot;childIconsrc&amp;quot;]) {&lt;br&gt;
                  this.childIconsrc
      = args[&amp;quot;childIconsrc&amp;quot;];&lt;br&gt;
              }&lt;br&gt;
              this.childIcon =
      document.createElement(&amp;quot;img&amp;quot;);&lt;br&gt;
              if (this.childIconsrc != &amp;quot;&amp;quot;) {&lt;br&gt;
                 
      this.childIcon.src = this.childIconsrc;&lt;br&gt;
                 
      this.childIcon.setAttribute(&amp;quot;width&amp;quot;, &amp;quot;16&amp;quot;);&lt;br&gt;
                 
      this.childIcon.setAttribute(&amp;quot;height&amp;quot;, &amp;quot;16&amp;quot;);&lt;br&gt;
              }&lt;br&gt;
              this.iconNode =
      this.tree.labelNodeTemplate.cloneNode(true);&lt;br&gt;
              this.titleNode =
      this.tree.labelNodeTemplate.cloneNode(true);&lt;br&gt;
              if (!this.isFolder){&lt;br&gt;
                  //clear treenode,
      if it is not folder node&lt;br&gt;
                 
      this.labelNode.innerHTML=&amp;quot;&amp;quot;;&lt;br&gt;
              }&lt;br&gt;
              this.titleNode.innerHTML=this.title;&lt;br&gt;
             
      this.iconNode.appendChild(this.childIcon);&lt;br&gt;
              // add icon first, then add title&lt;br&gt;
             
      this.labelNode.appendChild(this.iconNode);&lt;br&gt;
             
      this.labelNode.appendChild(this.titleNode);   
         &lt;br&gt;
          }&lt;br&gt;
      });&lt;br&gt;
      我们扩展了TreeNodeV3这个组件的postCreate方法（&lt;span style="color:rgb(255, 0, 0)"&gt;dojo组件都有这个方法，他相当于构造方法吧，我们可以在这里做必要的初始化&lt;/span&gt;），这里做的事应该比较清楚，我们通过childIconsrc这个属性创建了iconNode，
      然后清空TreeNodeV3的labelNode。再增加iconNode和titleNode&lt;br&gt;
      &lt;br&gt;
      &lt;font size=4&gt;2. 拖动物体到tree中&lt;/font&gt;&lt;br&gt;
      dragother.html&lt;br&gt;
      &amp;lt;div dojoType=&amp;quot;TreeV3&amp;quot; DndMode=&amp;quot;between;onto&amp;quot;
      &lt;span style="font-weight:bold"&gt;DndAcceptTypes=&amp;quot;firstTree;feed&amp;quot;&lt;/span&gt;
      widgetId=&amp;quot;firstTree&amp;quot;
      listeners=&amp;quot;basicController;&lt;span style="font-weight:bold"&gt;dndcontroller&lt;/span&gt;;selector;disableWrap&amp;quot;
      toggle=&amp;quot;fade&amp;quot; showGrid=&amp;quot;false&amp;quot; showRootGrid=&amp;quot;true&amp;quot;&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 1&amp;quot;
      widgetId=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; 
      title=&amp;quot;Item 1.1&amp;quot; widgetId=&amp;quot;Item 1.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      title=&amp;quot;Item 1.2&amp;quot; widgetId=&amp;quot;Item 1.2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 2&amp;quot;
      widgetId=&amp;quot;Item 2&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      title=&amp;quot;Item 2.1&amp;quot; widgetId=&amp;quot;Item 2.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Empty Folder&amp;quot;
      isFolder=&amp;quot;true&amp;quot; widgetId=&amp;quot;Item 3&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 4&amp;quot;
      widgetId=&amp;quot;Item 4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
      &amp;lt;br/&amp;gt;&lt;br&gt;
      &lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_0&amp;quot;&amp;gt;Drag me0 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_1&amp;quot;&amp;gt;Drag me1 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_2&amp;quot;&amp;gt;Drag me2 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span&amp;gt;You can't drag me.&amp;lt;/span&amp;gt;&lt;br&gt;
      注意黑体的DndAcceptTypes属性。说明这个树接受dragSource
      type为firstTree或者feed的（也就是自己，还有就是下面的span， 我们需要把span变成可以拖动的物体
      dragSource）。再看dragother.js。&lt;br&gt;
          dojo.addOnLoad(function(){&lt;br&gt;
                 var num = 0;&lt;br&gt;
                 while(dojo.byId(&amp;quot;feed_&amp;quot;
      + num) != null){&lt;br&gt;
                     var
      dropSource = new dojo.dnd.HtmlDragSource(dojo.byId(&amp;quot;feed_&amp;quot; + num),
      &amp;quot;feed&amp;quot;);&lt;br&gt;
                    
      num++;&lt;br&gt;
              }   &lt;br&gt;
          });&lt;br&gt;
      &lt;br&gt;
      dojo.dnd.TreeDropTargetV3.prototype.oldGetDropHandler =
      dojo.dnd.TreeDropTargetV3.prototype.getDropHandler;&lt;br&gt;
      dojo.lang.extend(dojo.dnd.TreeDropTargetV3, {&lt;br&gt;
         &lt;br&gt;
          getDropHandler: function(e, source, targetParent,
      targetIndex) {&lt;br&gt;
              if (source.type == &amp;quot;feed&amp;quot;){&lt;br&gt;
                  var sourceNode =
      source.domNode;&lt;br&gt;
                  if
      (dojo.widget.byId(sourceNode.id) != null){&lt;br&gt;
                 
          alert(&amp;quot;this widget has already been here.&amp;quot;);&lt;br&gt;
                 
          return function(){&lt;br&gt;
                 
              return false;&lt;br&gt;
                 
          }&lt;br&gt;
                  }
                 &lt;br&gt;
                  var node =
      createTreeNode(sourceNode.id, sourceNode.innerHTML);&lt;br&gt;
                 
      targetParent.addChild(node, targetIndex);&lt;br&gt;
                  return
      function(){&lt;br&gt;
                 
          return true;&lt;br&gt;
                  }&lt;br&gt;
              }&lt;br&gt;
              return this.oldGetDropHandler(e,
      source, targetParent, targetIndex);&lt;br&gt;
          }   &lt;br&gt;
      });   &lt;br&gt;
      &lt;br&gt;
      function createTreeNode(widgetId, title) {&lt;br&gt;
          return dojo.widget.createWidget(&amp;quot;TreeNodeV3&amp;quot;,&lt;br&gt;
          {&lt;br&gt;
              widgetId:
      widgetId,           
                 
                 
                 
         &lt;br&gt;
              title: title,&lt;br&gt;
              isFolder: false,&lt;br&gt;
              tree: 'firstTree'&lt;br&gt;
          });&lt;br&gt;
      }&lt;br&gt;
      &lt;br&gt;
第一段是让那些span成为dragsource。第二段我们hack了dojo.dnd.TreeDropTargetV3的
getDropHandler方法（具体可以看看TreeDndControllerV3.js）。当我们接收到dragSources时我们获取那些
span中的一些信息，然后create 一个treeNode，在把这个treeNode加到树中。&lt;br&gt;
      &lt;br&gt;
      3.   ...................................................&lt;br&gt;
      4.   ...................................................&lt;br&gt;
      5.   ...................................................&lt;br&gt;
      &lt;br&gt;
      
        还有一些hack treeV3的东西实在不愿写。
        dojo的treeV3真的是蛮强大的（&lt;span style="color:rgb(255, 0, 0)"&gt;仔细看看那几个＊＊Controller和TreeV3
        TreeNodeV3的源码&lt;/span&gt;），
        而且dojo的widget源码还是蛮容易理解的。有兴趣的朋友可以看看dojo的源码。还有就是dojo包里面tests目录下面的例子。大多数应用的话看看里面的例子也就行了。&lt;br&gt;
        &lt;br&gt;
        &lt;span style="color:rgb(255, 0, 0)"&gt;例
子的源码可以在http://deng.yin.googlepages.com/TreeV3Sample.zip下载。本例子中没有包括
dojo0.4源码，用户可以到http://download.dojotoolkit.org/release-0.4.0/dojo-0.4.0-
ajax.zip下载源码， 然后解压到例子中的dojo目录。&lt;br&gt;&lt;br&gt;格式不好的话可以看http://docs.google.com/View?docid=ajgd3tgv958v_3gz374h&lt;br&gt;&lt;/span&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Dojo+TreeV3%e4%bd%bf%e7%94%a8%e8%af%a6%e8%a7%a3&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry</guid><pubDate>Wed, 15 Nov 2006 08:38:07 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!250/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry#comment</wfw:comment><dcterms:modified>2006-11-15T08:38:07Z</dcterms:modified></item><item><title>巧妙使用javascript让你的页面程序处于index frame中。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry</link><description>假如我们有这个一个页面，  index.html &lt;br&gt;&amp;lt;frameset framespacing=&amp;quot;0&amp;quot; border=&amp;quot;false&amp;quot; cols=&amp;quot;180,*&amp;quot; frameborder=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame name=&amp;quot;left&amp;quot;  scrolling=&amp;quot;auto&amp;quot; marginwidth=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; src=&amp;quot;Toc.html&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame name=&amp;quot;main&amp;quot; scrolling=&amp;quot;auto&amp;quot; src=&amp;quot;Content.html&amp;quot;&amp;gt;&lt;br&gt;  &amp;lt;/frameset&amp;gt;&lt;br&gt;  &amp;lt;noframes&amp;gt;&lt;br&gt;  &amp;lt;body&amp;gt;&lt;br&gt;  &amp;lt;p&amp;gt;This page uses frames, but your browser doesn't support them.&amp;lt;/p&amp;gt;&lt;br&gt;  &amp;lt;/body&amp;gt;&lt;br&gt;  &amp;lt;/noframes&amp;gt;&lt;br&gt;&lt;br&gt;Toc.html是目录页面， Content.html是内容页面。       &lt;br&gt;&lt;br&gt;场景1：假如一个用户登入后， 进入index.html，然后用户过了很长一段时间没有操作session timeout了。这时候用户再去点页面的操作的话，这时候Content.html会转到登入页面， 但是因为在一个frame里面， 所以登入页面会在index.html中。我们希望他不出现在index.html中， 清在登入页面加上下面这段javascript&lt;br&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br&gt;    if (window.top != self){&lt;br&gt;        window.top.location = self.location;&lt;br&gt;    }&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;&lt;br&gt;场景2：我们希望右边的内容页面不能独立的出现（即一定要出现在index.html中），我们也需要在每个在“main” frame的页面加上下面这段javascript&lt;br&gt;if (window.top == self){&lt;br&gt;    // ensure sub page would contain in index page&lt;br&gt;    window.location=&amp;quot;index.html&amp;quot;;&lt;br&gt;}&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%b7%a7%e5%a6%99%e4%bd%bf%e7%94%a8javascript%e8%ae%a9%e4%bd%a0%e7%9a%84%e9%a1%b5%e9%9d%a2%e7%a8%8b%e5%ba%8f%e5%a4%84%e4%ba%8eindex+frame%e4%b8%ad%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry</guid><pubDate>Fri, 20 Oct 2006 02:00:37 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!245/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry#comment</wfw:comment><dcterms:modified>2006-10-20T02:00:37Z</dcterms:modified></item><item><title>How can I move text cursor in a text input field?</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry</link><description>&lt;pre&gt;Thanks the following codes. while in Firefox, you just need to invoke textElement.focus() method.&lt;br&gt;&lt;br&gt;So here is how to position the caret end the end of a text field/text&lt;br&gt;area with IE4/5:&lt;br&gt;&lt;br&gt;&amp;lt;SCRIPT&amp;gt;&lt;br&gt;function setCaretToEnd (el) {&lt;br&gt;  if (el.createTextRange) {&lt;br&gt;    var v = el.value;&lt;br&gt;    var r = el.createTextRange();&lt;br&gt;    r.moveStart('character', v.length);&lt;br&gt;    r.select();&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;function insertAtEnd (el, txt) {&lt;br&gt;  el.value += txt;&lt;br&gt;  setCaretToEnd (el);&lt;br&gt;}&lt;br&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br&gt;&amp;lt;/HEAD&amp;gt;&lt;br&gt;&amp;lt;BODY&amp;gt;&lt;br&gt;&amp;lt;FORM&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;aText&amp;quot; SIZE=&amp;quot;40&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;a2ndText&amp;quot; VALUE=&amp;quot;Kibology for all.&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;button&amp;quot; VALUE=&amp;quot;insert and move to end&amp;quot;&lt;br&gt;       ONCLICK=&amp;quot;insertAtEnd (this.form.aText,&lt;br&gt;this.form.a2ndText.value);&amp;quot;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;a3rdText&amp;quot; VALUE=&amp;quot;All for Kibology.&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;button&amp;quot; VALUE=&amp;quot;insert and move to end&amp;quot;&lt;br&gt;       ONCLICK=&amp;quot;insertAtEnd (this.form.aTextArea,&lt;br&gt;this.form.a3rdText.value);&amp;quot;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;TEXTAREA NAME=&amp;quot;aTextArea&amp;quot; ROWS=&amp;quot;5&amp;quot; COLS=&amp;quot;20&amp;quot; WRAP=&amp;quot;soft&amp;quot;&amp;gt;&amp;lt;/TEXTAREA&amp;gt;&lt;br&gt;&amp;lt;/FORM&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;http://www.faqts.com/knowledge_base/view.phtml/aid/17749/fid/53&lt;br&gt;&lt;/pre&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+How+can+I+move+text+cursor+in+a+text+input+field%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry</guid><pubDate>Mon, 09 Oct 2006 07:29:09 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!242/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry#comment</wfw:comment><dcterms:modified>2006-10-09T07:29:09Z</dcterms:modified></item><item><title>Hack dojo codes with dojo's util</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry</link><description>dojo.lang.extend(dojo.widget.PopupMenu2, {&lt;br&gt;    onOpen: function(e){&lt;br&gt;        this.openEvent = e;&lt;br&gt;        var x = e.pageX, y = e.pageY;&lt;br&gt;&lt;br&gt;        var win = dojo.html.getElementWindow(e.target);&lt;br&gt;        var iframe = win._frameElement || win.frameElement;&lt;br&gt;        if(iframe){&lt;br&gt;            var cood = dojo.html.abs(iframe, true);&lt;br&gt;            x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left;&lt;br&gt;            //override the onOpen to reslove the problem the context popup menu open under the selected TreeNode.&lt;br&gt;            if (!(e.type == &amp;quot;contextmenu&amp;quot; &amp;amp;&amp;amp; dojo.render.html.ie))&lt;br&gt;                y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top;&lt;br&gt;        }&lt;br&gt;        this.open(x, y, null, [x, y]);&lt;br&gt;&lt;br&gt;        e.preventDefault();&lt;br&gt;        e.stopPropagation();&lt;br&gt;    }&lt;br&gt;});&lt;br&gt;&lt;br&gt;这样我们就是复写了dojo.widget.PopupMenu2类的onOpen方法。如果我们想调用覆盖以前的方法。&lt;br&gt;//backup the old function&lt;br&gt;dojo.widget.TreeBasicControllerV3.prototype.oldOnKey =dojo.widget.TreeBasicControllerV3.prototype.onKey; &lt;br&gt;dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {&lt;br&gt;    onClick: function(e) {&lt;br&gt;        if (e.target.tagName == &amp;quot;INPUT&amp;quot;)&lt;br&gt;            return ;&lt;br&gt;        // default click handler just sets the focus&lt;br&gt;        var treeWidget = this.getWidgetByNode(e.currentTarget);&lt;br&gt;        if (!treeWidget || !treeWidget.isTree) { return; }&lt;br&gt;        var nodeWidget = this.getWidgetByNode(e.target);&lt;br&gt;        if (!nodeWidget || !nodeWidget.isTreeNode) { return; }&lt;br&gt;        this._focusLabel(treeWidget, nodeWidget);&lt;br&gt;    },&lt;br&gt;    onKey: function (e){&lt;br&gt;        if (e.target.tagName == &amp;quot;INPUT&amp;quot;)&lt;br&gt;            return ;&lt;br&gt;        this.oldOnKey(e);&lt;br&gt;    }&lt;br&gt;});&lt;br&gt;&lt;br&gt;dojo.lang.extend这个方式是多么的方便。我们可以用这个方法方便的扩展或修改以有的代码。&lt;br&gt;&lt;br&gt;看看dojo的dojo.lang.common  里面包括了对象间的一些操作。如dojo.lang.inherits， dojo.lang.mixin etc&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Hack+dojo+codes+with+dojo's+util&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry</guid><pubDate>Tue, 12 Sep 2006 07:05:02 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!232/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry#comment</wfw:comment><dcterms:modified>2006-09-12T07:05:02Z</dcterms:modified></item><item><title>javascript中的继承。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry</link><description>本来打算写篇关于javascript继承的文章， 但是觉得这篇文章已经写得够好了。&lt;br&gt;&lt;br&gt;http://forum.javaeye.com/viewtopic.php?t=19748&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+javascript%e4%b8%ad%e7%9a%84%e7%bb%a7%e6%89%bf%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry</guid><pubDate>Tue, 05 Sep 2006 02:00:59 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!227/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry#comment</wfw:comment><dcterms:modified>2006-09-05T02:00:59Z</dcterms:modified></item></channel></rss>