昨天下午突然接到公司通知,以前處理的XX物資系統(tǒng)的部門,班組,工程,供應(yīng)廠商部分都需要修改成Ajaxtags的autocomplete來(lái)完成,用戶需要輸入查詢碼來(lái)進(jìn)行索引,于是開(kāi)始動(dòng)手研究Ajaxtags.
          Ajaxtags是基于prototype.js的簡(jiǎn)化AJAX開(kāi)發(fā)的組件,可以通過(guò)標(biāo)簽來(lái)來(lái)完成以前非常復(fù)雜的事情.
          通過(guò)DOME和原代碼的分析,我感覺(jué),他的簡(jiǎn)化過(guò)于局限,沒(méi)有非常好擴(kuò)展性,只能做一些簡(jiǎn)單的處理,比方他的AjaxXmlBuilder的toString()方法可以返回一種簡(jiǎn)單的XML格式,而且過(guò)于簡(jiǎn)單:

          <?xml version="1.0" encoding="UTF-8"?>
          <ajax-response>
            
          <response>
              
          <item>
                
          <name>Record 1</name>
                
          <value>1</value>
              
          </item>
              
          <item>
                
          <name>Record 2</name>
                
          <value>2</value>
              
          </item>
              
          <item>
                
          <name>Record 3</name>
                
          <value>3</value>
              
          </item>
            
          </response>
          </ajax-response>

          他在autocomplete處理時(shí)會(huì)用到這中XML文件:
          以下是在他的JS中解析XML的部分
               var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
                
          var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;
          由此可以看出他過(guò)于簡(jiǎn)單,如果我有多個(gè)屬性需要放入自動(dòng)下拉菜單中怎么辦?
          好辦,我們擴(kuò)展!
          自己造一個(gè)AjaxXmlBuilder,繼承一下就可以了,把toString()方法重載掉~(yú)讓他組一個(gè)我要的XML文件出來(lái),然后再到頁(yè)面上自己解吸他`就OK了~
          我的類:
          package com.kaiwang.mmis.ajax.autoselect;

          import java.lang.reflect.InvocationTargetException;
          import java.util.ArrayList;
          import java.util.Collection;
          import java.util.Iterator;
          import java.util.List;

          import org.ajaxtags.helpers.AjaxXmlBuilder;
          import org.apache.commons.beanutils.BeanUtils;

          /**
           * 重載ajaxxmlbuilder封裝出新的xml文件
           * 
          @author Gary.lee Jan 16, 2006
           
          */

          public class ManufacturerXmlBuilder extends AjaxXmlBuilder implements MisAjaxXmlBuilder  {
              
              
          private String encoding = "UTF-8";
              
          private List items = new ArrayList();
              
              
          public ManufacturerXmlBuilder addItems(Collection collection, String nameProperty, String valueProperty, String seachCodeProperty) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
                  
          for (Iterator iter = collection.iterator(); iter.hasNext();) {
                      Object element 
          = (Object) iter.next();
                      String name 
          = BeanUtils.getProperty(element, nameProperty);
                      String value 
          = BeanUtils.getProperty(element, valueProperty);
                      String seachCode 
          = BeanUtils.getProperty(element, seachCodeProperty);
                      items.add(
          new MisAjaxBaseItem(name, value, seachCode));
                    }

                  
          return this;
              }


              
          /**
               * 
          @see java.lang.Object#toString()
               
          */

              
          public String toString() {
                StringBuffer xml 
          = new StringBuffer().append("<?xml version=\"1.0\"");
                
          if (encoding != null{
                  xml.append(
          " encoding=\"");
                  xml.append(encoding);
                  xml.append(
          "\"");
                }

                xml.append(
          " ?>");

                xml.append(
          "<ajax-response>");
                xml.append(
          "<response>");
                
          for (Iterator iter = items.iterator(); iter.hasNext();) {
                 MisAjaxBaseItem item 
          = (MisAjaxBaseItem) iter.next();
                xml.append(
          "<item>");
                xml.append(
          "<name>"); 
                xml.append(
          "<![CDATA[");
                xml.append(item.getName());
                xml.append(
          "]]>");
                xml.append(
          "</name>");
                xml.append(
          "<value>");
                xml.append(
          "<![CDATA[");
                xml.append(item.getId());
                xml.append(
          "]]>");
                xml.append(
          "</value>");
                xml.append(
          "<searchcode>");
                xml.append(
          "<![CDATA[");
                xml.append(item.getSearchCode());
                xml.append(
          "]]>");
                xml.append(
          "</searchcode>");
                  xml.append(
          "</item>"); 
                }

                xml.append(
          "</response>");
                xml.append(
          "</ajax-response>");
                
          return xml.toString();
              }

          }


          這樣就有了我要的XML文件格式了~再修改JS
                var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
                
          var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;
                
                
          //新增加一個(gè)searchcode部分的解析
                var searchCode = items[i].getElementsByTagName("searchcode")[0].firstChild.nodeValue;
                
                
          var li = document.createElement("li");
                
          var liIdAttr = document.createAttribute("id");
                li.setAttribute(
          "id", value);
                
          //將searchcode部分+name輸出到文本區(qū)域中
                var liText = document.createTextNode(name+'('+searchCode+')');
          大家可以看到,我加入了一個(gè)searchCode的東西就是在下拉框中把searchCode打印出來(lái)!
          效果~~~~~~我抓張圖出來(lái)看看:

          樣子還可以吧`!
          用過(guò)autocomplete的朋友應(yīng)該知道如果僅僅是鼠標(biāo)點(diǎn)擊以后這個(gè)框是不會(huì)出來(lái)了~
          因?yàn)樗J(rèn)的事件是"keyup",也就是當(dāng)有輸入的時(shí)候才出來(lái).初始化的部分在JS中:
           setOptions: function(options) {
              
          this.options = {
                sourceElem: $(options.source),
                targetElem: $(options.target),
                eventType: options.eventType 
          ? options.eventType : "keyup",
                appendValue: evalBoolean(options.appendValue),
                appendSeparator: options.appendSeparator 
          || " ",
                forceSelection: evalBoolean(options.forceSelection)
              }
          .extend(options || {});
          而且這里如果換成"force"的話,在下拉框中的上下鍵和回車就失效了,沒(méi)關(guān)系!解決了!在調(diào)用的時(shí)候把eventType:"focus"   加上(這個(gè)屬性官方文檔中并沒(méi)有說(shuō)~)然后找到:
           attachBehaviors: function(element, event, listener, obj) {
              
          if (isArray(element)) {
                
          for (var i=0; i<element.length; i++{
                  eval(
          "element[i].on"+event+" = listener.bindAsEventListener(obj)");
                }

              }
           else {
                eval(
          "element.on"+event+" = listener.bindAsEventListener(obj)");
                eval(
          "element.onkeyup = listener.bindAsEventListener(obj)");
              }

            }
          大家可以看到我在下面又追加了一個(gè)“keyup”的屬性,這樣既在得到焦點(diǎn)的時(shí)候可以出來(lái),也可以在用上下建的時(shí)候選擇,還可以做篩選~還有就是我沒(méi)有實(shí)用標(biāo)簽,我讀了它的DOME以后發(fā)現(xiàn)它僅僅是封裝了JS而已,用了標(biāo)簽以后感覺(jué)怪怪的,為什么JS的調(diào)用也要用標(biāo)簽封裝呢??jī)H僅是可以在標(biāo)簽中實(shí)用EL語(yǔ)法·但是又有多少兄弟會(huì)用呢?最主要的是它的標(biāo)簽中好想沒(méi)有“eventType”這個(gè)屬性~,看看我的調(diào)用:
          //班站編號(hào)
          new AjaxJspTag.Autocomplete("<%=request.getContextPath()%>/autoSelectTeam.do"{
                                                      parameters:
          "team={team_Name},depId={department_Id}",
                                                      progressStyle:
          "throbbing",
                                                      target:
          "team_Id",
                                                      className:
          "autocomplete",
                                                      source:
          "team_Name",
                                                      forceSelection:
          "yes",
                                                      eventType:
          "focus"            
          }
          );

          要注意的是parameters這里多參數(shù)實(shí)用了,號(hào)隔開(kāi),這樣到ACTION中就可以用depId接到值了~這個(gè)東西在官方文檔中也沒(méi)有說(shuō)出來(lái),還是同事發(fā)現(xiàn)的~!

          本人文采不行``大家見(jiàn)諒,希望文章對(duì)用ajaxTags的朋友有寫幫助,我的原則就是·能改的我都改·只要我能用就可以了!

          我再改~前面說(shuō)了,我修改了AJAX基本的JS文件``但是他的其他屬性就不能用了~~~很痛苦,所以晚上突然想到,我專門為他加一個(gè)方法就可以了~

          //事件觸發(fā)(修改增加一個(gè)keyup事件auto專用)
            attachBehaviorsAuto: function(element, event, listener, obj) {
                eval(
          "element.on"+event+" = listener.bindAsEventListener(obj)");
                eval(
          "element.onkeyup = listener.bindAsEventListener(obj)");
            }

          再改一下`他調(diào)用的地方,換成這個(gè)方法就好了`噎!

          Feedback

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2006-01-20 16:23 by 過(guò)客007
          好深?yuàn)W……

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2006-01-21 23:14 by fd
          你所說(shuō)的不用去該都能夠?qū)崿F(xiàn),只要在頁(yè)面加上自己定義的js

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2006-08-15 17:44 by 菜鳥(niǎo)!!!
          請(qǐng)教樓主
          這個(gè)解析函數(shù),在那個(gè)文件里,希望指點(diǎn)指點(diǎn)
          var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
          var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2007-02-03 18:35 by Janny
          很好,道理很易懂,只是實(shí)際工作中經(jīng)常管不住自己。看來(lái)需要經(jīng)常提醒自己。
          謝謝!

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2007-04-21 20:59 by der
          <a href="http://www.shjp8.com">上海機(jī)票</a>,
          <a href="http://www.shjp8.com">上海打折機(jī)票</a>,
          <a href="http://www.dogstoreol.com">Dog Clothes</a> ,
          <a href="http://www.chongqing-life.com">chongqing</a>,
          <a href="http://www.yantai-life.com">yantai</a>,
          <a href="http://blog.hc360.com/ltg110">google左側(cè)排名</a>,
          <a href="http://sr321.blog.com.cn">google左側(cè)排名</a>,
          <a href="http://blog.5d.cn/user33/sr321">google左側(cè)排名</a>,
          <a href="http://sr321.blog.ccidnet.com">google左側(cè)排名</a>,
          <a href="http://blog.yesky.com/blog/sr321">google左側(cè)排名</a>,
          <a href="http://sr321.blog.soufun.com ">google左側(cè)排名</a>,
          <a href="http://googlefff.bokee.com">google左側(cè)排名</a>,
          <a href="http://mzyy888.blog.163.com">google排名優(yōu)化</a>,
          <a href="http://blog.zol.com.cn/googleleft">google排名優(yōu)化</a>,
          <a href="http://baidu-google.blog.sohu.com">google排名優(yōu)化</a>,
          <a href="http://baidu-google.blog.sohu.com">google排名優(yōu)化</a>,
          <a href="http://blog.sina.com.cn/u/1276417342">google排名優(yōu)化</a>,
          <a href="http://mzyy888.blog.china.alibaba.com/">google排名優(yōu)化</a>,
          <a href="http://blog.focus.cn/myblog/20291110.html">google左側(cè)排名</a>,
          <a href="http://ltg110.blog.hexun.com/">google排名</a>,
          <a href="http://www.sr321.com/">google左側(cè)排名</a>,
          <a href="http://www.sr321.net/">google左側(cè)排名</a>,
          <a href="http://www.google2007.com/">google左側(cè)排名</a>,

          # Pearl Jewelry  回復(fù)  更多評(píng)論   

          2007-06-22 19:46 by asdfdas
          asdfadf

          # Pearl Jewelry  回復(fù)  更多評(píng)論   

          2007-06-22 19:46 by Pearl Jewelry
          adfadsf

          # loose bead wholesale  回復(fù)  更多評(píng)論   

          2007-06-22 19:48 by loose bead wholesale
          adfadsfads

          # wholesale jewellery  回復(fù)  更多評(píng)論   

          2007-06-22 19:48 by wholesale jewellery
          adfadsfadsfad

          # wholesale bead  回復(fù)  更多評(píng)論   

          2007-06-22 19:49 by wholesale bead
          asdfasdf

          # wholesale pearls  回復(fù)  更多評(píng)論   

          2007-06-22 19:49 by wholesale pearls
          afafasdfasdfasdf

          # wholesale pearl  回復(fù)  更多評(píng)論   

          2007-06-22 19:50 by wholesale pearl
          adfasdfadsf

          # re: 我玩Ajaxtags(autocomplete) www.googleah.cn  回復(fù)  更多評(píng)論   

          2007-08-30 22:00 by www.googleah.cn
          專業(yè)從事GOOGLE左側(cè)、GOOGLE左側(cè)排名等搜索引擎優(yōu)化服務(wù),有多年實(shí)踐經(jīng)驗(yàn),價(jià)格實(shí)惠,有需要的朋友可以登陸http://www.googleah.cn或者來(lái)電聯(lián)系:0571-81562921,以及在線聯(lián)系QQ:76312063,相信選擇我們是你明智的選擇。需要做友情鏈接交換的朋友也可以聯(lián)系我www.haohome.com www.qjtogo.com www.luan.ah.cn www.21xcn.com

          # re: 我玩Ajaxtags(autocomplete) www.googleah.cn  回復(fù)  更多評(píng)論   

          2007-10-30 18:49 by www.googleah.cn
          專業(yè)從事GOOGLE左側(cè)、GOOGLE左側(cè)排名等搜索引擎優(yōu)化服務(wù),有多年實(shí)踐經(jīng)驗(yàn),價(jià)格實(shí)惠,有需要的朋友可以登陸http://www.googleah.cn或者來(lái)電聯(lián)系:0571-81562921,以及在線聯(lián)系QQ:76312063,相信選擇我們是你明智的選擇。需要做友情鏈接交換的朋友也可以聯(lián)系我www.haohome.com www.qjtogo.com www.luan.ah.cn www.21xcn.com

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2008-02-23 14:17 by runescape money
          eeee

          # re: 我玩Ajaxtags(autocomplete)  回復(fù)  更多評(píng)論   

          2008-02-23 14:17 by runescape gold
          wwww

          # 求助[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-07-15 10:10 by 冰川
          你好,我也在改Ajaxtags(autocomplete),想請(qǐng)求你的幫助,問(wèn)題如下:

          我的頁(yè)面需要自動(dòng)完成的部分,一個(gè)(inputA)在頁(yè)面頂部,一個(gè)(inputB)在頁(yè)面底部,A肯定是沒(méi)問(wèn)題了,但B就不行,自動(dòng)完成的部分看不到了,所以想修改代碼,讓A朝下,而B(niǎo)朝上。

          在那幾個(gè)js文件中,哪部分是控制它們的位置的?

          樂(lè)意幫助的話,請(qǐng)致信:yanlei_bctn@qq.com

          posts - 19, comments - 31, trackbacks - 0, articles - 2

          Copyright © JavaXP

          主站蜘蛛池模板: 墨脱县| 通辽市| 霍林郭勒市| 大荔县| 扎鲁特旗| 黔江区| 日土县| 古蔺县| 当雄县| 西畴县| 彭山县| 招远市| 阳信县| 南皮县| 板桥市| 绵阳市| 通州市| 黔西县| 浙江省| 宿州市| 赤水市| 启东市| 错那县| 鄂托克前旗| 灵武市| 揭阳市| 深水埗区| 通山县| 修文县| 龙胜| 西乌珠穆沁旗| 和田市| 巩留县| 九龙城区| 珲春市| 铜山县| 安丘市| 常熟市| 大同县| 玉溪市| 湘乡市|