修改buffalo代碼一

          Posted on 2006-03-02 19:46 killvin 閱讀(220) 評(píng)論(0)  編輯  收藏 所屬分類: javascript

          Buffalo介紹

          Web正隨著Amowa/Ajax的引入開(kāi)發(fā)開(kāi)始變得有趣!

          Buffalo是Amowa思想實(shí)現(xiàn)的關(guān)鍵組件。Buffalo中定義了Web遠(yuǎn)程調(diào)用的傳輸基礎(chǔ),并且將遠(yuǎn)程調(diào)用對(duì)象完整的序列化到了本地,成為可以被JavaScript編程觸及的對(duì)象。Buffalo中的重要組件 - BuffaloBinding,提供了將JavaScript對(duì)象綁定到HTML元素的能力。這種綁定將是無(wú)侵入的,只需要在HTML元素中加入若干個(gè)不影響排版的屬性,即可將數(shù)據(jù)與界面綁定。

          Buffalo1.1之前的版本重要的功能主要集中于遠(yuǎn)程調(diào)用與Java對(duì)象/JavaScript對(duì)象之間的雙向序列化,這個(gè)特性已經(jīng)被眾多的應(yīng)用久經(jīng)考驗(yàn),被認(rèn)為是健壯的。它大大減少了在Java對(duì)象與JavaScript對(duì)象之間需要考慮的細(xì)節(jié),開(kāi)發(fā)者可以更用心地進(jìn)行業(yè)務(wù)設(shè)計(jì)和界面設(shè)計(jì)。1.2版本的推出,引入了新的眾多的特性,包括:新的重新改寫(xiě)的Spring集成;與流行javascript庫(kù)prototype的集成;支持瀏覽器前進(jìn)后退按鈕,等等。Buffalo努力使Web2.0的概念在這個(gè)小小的輕量級(jí)的框架中得到體現(xiàn),讓你的應(yīng)用具備更豐富的表現(xiàn)。

           

          問(wèn)題

          可是在使用Buffalo傳輸對(duì)象的過(guò)程中我發(fā)現(xiàn)Buffalo并不能夠很好的傳遞用戶自定義的對(duì)象,不光如此在與作者的討論過(guò)程中我還發(fā)現(xiàn)很多的人對(duì)于Javascript程序的規(guī)范根本不屑一顧,似乎選擇了Javascript本身就是選擇了"自由編程",可是真的如此嗎?

          其實(shí)Javascript是一個(gè)比較純粹的OO語(yǔ)言,并不想一些報(bào)道中所說(shuō)的那樣,對(duì)于封裝、繼承、多態(tài)Javascript同樣可以完成,既然它是OO的語(yǔ)言,就理所應(yīng)當(dāng)?shù)陌凑漳撤N規(guī)范來(lái)編寫(xiě)代碼,正如JavaScript說(shuō)分明 中說(shuō)得那樣,編寫(xiě)Javascript不是一件簡(jiǎn)單的事情,關(guān)鍵是很多人亂用了這個(gè)語(yǔ)言,從而導(dǎo)致給很多的朋友以為寫(xiě)Javascript就是很沒(méi)有水準(zhǔn)的事情(偶以前也是如此),但我最近發(fā)現(xiàn)用Javascript這樣的動(dòng)態(tài)語(yǔ)言沒(méi)有一個(gè)很好的語(yǔ)言規(guī)范,你開(kāi)發(fā)出來(lái)的應(yīng)用只能夠停留在小型系統(tǒng)之上,而對(duì)于比較大型的應(yīng)用開(kāi)發(fā),這樣寫(xiě)出來(lái)得代買(mǎi)根本無(wú)法復(fù)用!

          再來(lái)說(shuō)說(shuō)Buffalo傳輸對(duì)象的問(wèn)題,以下是我自定義的Node對(duì)象

          function Node(_id , _type)
          {

           //log("create node object!!!");
           //============================== property =================================//
              //=========================================================================//
           var id = _id;
           var type = _type; //<- type的出現(xiàn)在OO世界里本身就是背叛
           var brush = null //節(jié)點(diǎn)的物理表現(xiàn)句柄
           
           var rList = new Array();//左節(jié)點(diǎn)列表
           var lList = new Array();//右節(jié)點(diǎn)列表
           
           var rLine = new Array();//節(jié)點(diǎn)的左線列表
           var lLine = new Array();//節(jié)點(diǎn)的右線列表

           var x = 0;//節(jié)點(diǎn)的x坐標(biāo)
           var y = 0;//節(jié)點(diǎn)的y坐標(biāo)

           var m = false; //標(biāo)識(shí)節(jié)點(diǎn)是否可移動(dòng)
           var r = false; //標(biāo)識(shí)節(jié)點(diǎn)是否能夠建立聯(lián)系

           var name = ""; //節(jié)點(diǎn)的名稱

           //================================ method =================================//
              //=========================================================================//

           this.getType = function()
           {
            return type;
           }
           this.setType = function(_t)
           {
            type = _t;
           }
           this.setName = function(_n)
           {
            name = _n;
           }
           this.getName = function()
           {
            return name;
           }
           this.setId = function(_i)
           {
            id = _i;
           }
           this.getId = function()
           {
            return id;
           }
          }

          然而在使用Buffalo的時(shí)候Node對(duì)象根本就無(wú)法傳遞,而導(dǎo)致這個(gè)問(wèn)題的原因竟然是我沒(méi)有"自由的編寫(xiě)Javascript"!其實(shí)問(wèn)題就出在doStructXML 方法上,作者在這里有意的"避開(kāi)"了這個(gè)問(wèn)題,所以在傳遞Node的時(shí)候?qū)τ谄渌接械姆椒˙uffalo是根本就不考慮的,F(xiàn)AINT!

          原先

           doStructXML : function(data){
            var boClass = data[Buffalo.BOCLASS];
            var boType = boClass ? boClass : "java.util.HashMap";
            var xml = "<map>\n";
            xml += "<type>" +boType+ "</type>\n";

            for (var i in data){
             if (data[i] != boType) {
              if (typeof(data[i]) == "function") continue; /* the function shouldn't transfered. */
              xml += this.getParamXML(this.dataTypeOf(i),i)+"\n";
              xml += this.getParamXML(this.dataTypeOf(data[i]),data[i]) + "\n";
             }
            }
            xml += "</map>\n";
            return xml;
           },

          修改后

           doStructXML : function(data){
            var boClass = data[Buffalo.BOCLASS];
            var boType = boClass ? boClass : "java.util.HashMap";
            var xml = "<map>\n";
            xml += "<type>" +boType+ "</type>\n";

            for (var i in data){
             if (data[i] != boType) {
              if (typeof(data[i]) == "function")
              {
               /*判斷方法名稱*/
               if(i.substring(0,3) == 'get')
               {
                var _name = i.substring(3,i.length).toLowerCase();
                var _value = data[i]();
                //alert("functin name[" + this.dataTypeOf(_name) + "]=" + _name
                // + " | value[" + this.dataTypeOf(_value) + "]=" + _value);

                xml += this.getParamXML(this.dataTypeOf(_name),_name)+"\n";
                xml += this.getParamXML(this.dataTypeOf(_value),_value) + "\n";
               }
               continue; /* the function shouldn't transfered. */

              }
              
              xml += this.getParamXML(this.dataTypeOf(i),i)+"\n";
              xml += this.getParamXML(this.dataTypeOf(data[i]),data[i]) + "\n";
             }
            }
            xml += "</map>\n";
            return xml;
           }

           

          總結(jié)

          1。Javascript的編寫(xiě)是否應(yīng)該遵守一定的規(guī)范,其實(shí)屬于程序員自身休養(yǎng)的問(wèn)題,但我還是覺(jué)得復(fù)用JAVA的編碼規(guī)范不是壞事情!

          2。時(shí)刻記住Buffalo是建立在burlap協(xié)議的基礎(chǔ)上的,我們應(yīng)該把注意力放在burlap上而不僅僅只是Buffalo!

          主站蜘蛛池模板: 铜陵市| 崇左市| 巴中市| 天长市| 凤翔县| 舒兰市| 武乡县| 健康| 乌鲁木齐市| 繁昌县| 林口县| 杭锦旗| 云阳县| 文登市| 区。| 荥经县| 东光县| 黑水县| 和静县| 苏尼特右旗| 颍上县| 竹山县| 静宁县| 长海县| 民县| 驻马店市| 紫阳县| 元江| 股票| 北宁市| 泰顺县| 宣恩县| 佛山市| 怀化市| 昌邑市| 邳州市| 庆元县| 伊吾县| 华宁县| 开化县| 藁城市|