??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
If you are interested in it, you can vist the url
http://code.google.com/p/jsparse/
具备以下的功?
1> 实现?jin)B/Sl构上的工作定义工P没有看到同类型的产品Q?
2> 程定义格式与具体的工作格式相分离Qƈ可以在此基础上实现其他的程定义工具产品?
3> 采用?jin)BuffaloQXML-RPC的javascript实现Q实C后端Servlet的绑定?
4> 可以对具体的节点q行属性的配置Q配|后的数据会(x)被绑定ؓ(f)java的List自动传递到后端Q?
目前q需要改q的
1> 修改目前工作的图标Q需要分支、状态、合q这样专业的图标Q?
2> 解决览器的h问题?
3> 增加U段的表现Ş式选项
4> 增加曲线的表现Ş式,其是在多线D늚情况下要自动调整为曲U的形式?
目前的WFC已经?font color="#000000">Michael ChenQbuffalo的作者)(j)收录在其|站上!地址如下
http://demo.amowa.net/wfc
对于buffalo的关注早在作者刚发布的时候就已经开始了(jin)Qv初不太了(jin)解buffalo的作用,然而在具体的工作中LZXML-RPC协议的品时H然明白?jin)它的h(hun)|不过说简单一点buffalo是实C(jin)Zjavascript的对象的序列化以?qing)反序列化工作?/font>
common.js
function log(v)
{
var s = "<li><font color=blue>"+new Date()+"</font> "+v+"</li>";
logPanel_log.innerHTML+=s;
}
window.onhelp = function()
{
logPanel.style.display=logPanel.style.display=='none'?"block":"none";
return false;
}
document.write(
"<div id=logPanel style='display:none;text-align:right'>"+
"<button onclick=\"logPanel_log.innerHTML='';\">clear</button> "+
"<button onclick=\"logPanel_log.innerHTML+='<hr>';\">HR</button>"+
"<div id='logPanel_log'></div></div>");
它覆盖了(jin)默认的IE 按F1键显CIE help的行为,现在按下F1p够显Clog信息?jin)?BR>
摘自 redsaga满江U?http://www.blogcn.com/User6/caoxg/blog/5705836.html
http://taiwan.cnet.com/enterprise/technology/0,2000062852,20103386,00.htm
׃傑撰 2005/12/28
最q因為AJAX受到Google{網路服務業者的愛用而聲名大噪。也讓這個其實存在很久的E式語言再度成為a論話題?
JavaScript可以說是全世界用最普遍的一個語a。雖然就ip資料(a?上來看,用JavaScriptZ的專案數量只排在W九(ji)名,但我怿應用的層面來看Q絕遠過Java?Net。JavaScript也是最讓hh的一個語aQ即便是業的網頁工E師Q也不見得每位都能正的?jin)解它。網頁工E師它又愛又恨Q用者最能體驗到它所帶來的好處,但常怹是被它搞的昏頭轉向。到底它是個什麼樣奇的語a呢?
JavaScript的前世今?/P>
提到JavaScriptQ大家第一個聯惛_的就是JavaQ但一切的誤解也就從這開始。要說它跟Java完全沒關係嘛Q也不盡然。JavaScript原來的名E叫LiveScriptQ是Netscape(E景)Z(jin)它的LiveWareq_所發展Z的一套語a。後來之所以改名叫JavaScriptQ主要是因為當年Netscape與Sun合作Q共同開發網頁上的腳本語aQ而剛好Sun正在開發Java語言Q初期而且也是以網頁上的應用Java AppletZQ所以LiveScript也就改名為JavaScript。第一個擁有執行JavaScript的瀏覽器Netscape 2.0Q發表日期也跟Java一樣,同樣都是1995q_(d)所以算起來今年也是JavaScript的十歲生日?/P>
JavaScript的版本非常多E,最原始的是由Netscape一路發展過來的Q後來NetScape把它交ECMA製定為標?ECMA-262)Q而ECMA所製定Z的稱之為ECMAScriptQ最喜歡自己也搞一套的微軟Q也有自a的Jscript。理論上Q有?jin)標準大家就應該要遵守,不過到目前看來,實際上並非如此。各家瀏覽器相容的E度不一Q造成珑֜混亂的局面,同一個網頁用不同的瀏覽器瀏覽有時i果不盡相同?/P>
JavaScript沒有你想像中的簡?/P>
JavaScript是屬於prototype-based的一E語aQ而prototype-based又是物g向E式a計語言(Object-Oriented Programming Language)的一個分枝,所以嚴D起來QJavaScript也是一E物件導向程式設a語a。光看到「物件導向」這四個字Q我惛_多h頭皮都已E開始發M(jin)Q不過JavaScript之所以不單並不是因為這一點,而是因為它的i構鬆散和型態鬆?loose typing)所致?/P>
你若寫過JavaE式的話或許q道,JavaE式必需要Java虛擬器(JVM)上執行,在執行JavaE式之前Q它必需是被R譯過的Q在R譯的過E中QJava會檢查許a多多的條gQ例如最基本的語法、變數的宣告{等?/P>
JavaScript一樣得依存在一個容?Container)中才能執行,我們常見到的容器就是瀏覽?Web Browser)Q跟Java不同的是QJavaScript的程式不需要事先編譯,它是屬於直譯式的語言Q你可以把它惛_成看C行程式碼執行一行。因為少?jin)編譯時期的檢查QJavaScript比Java「自由」許多,你可以在E頁上隨意的位置上安插JavaScriptE式、可以隨意的建立新的變數來用;你不用分清楚什麼是數|什麼是字串、什麼又是物Ӟ通通可以加?+)在一P這就會造成相當不嚴的開發過程?/P>
自由是必需要付Z價的Q前面提到相Ҏ(gu)的混亂Q在這又有語法結構上的亂,這下子可以說是亂上加亂了(jin)。網頁工E師之所以對JavaScript又愛又恨Q愛是因為透過適當的JavaScriptQ可以在E頁上創造出ap多多Ҏ(gu)的效果,讓用者在瀏覽這個網頁時Q能有更多的互動。恨是因為市(jng)場上極少有以JavaScriptZ的整合開發工?IDE)Q因為剛剛所說的混亂Q造成JavaScriptE式很難開發和除錯?/P>
JavaScript之所以普?qing),是因為寫JavaScriptE式的用者,不見得是寫Java、C/C++、VB{受過基本程式設a訓R的E式a計師,往往E頁的美工h員才是用JavaScript的大宗。他們不會也沒時間去學習完整的JavaScriptQ而是有需要時才在E頁上東加一些、西加一點,這些加上ȝJavaScript可能是網頁編輯器所提供的元件、或是網路上分nZ的程式片Dc(din)JavaScript一點都不簡單,只是大家都很hQ用最單的方式來使用它罷?jin)?/P>
AJAX應用為JavaScript注入強心(j)?/P>
JavaScript十年來沒有特別受歡迎Q因為WWW盛行以來它和HTML一樣已變成E頁裡最基本的元素,直到AJAX的出現,讓JavaScript大大的受到眾人的注視。AJAX的全名是 Asynchronous JavaScript and XMLQJavaScript是其中之一的主角,AJAX並不是一項新的技術,而是一些舊有的技術結合v來做一Ey妙的應用Qc予網頁的一股新動力?
AJAX這個名詞最早是出現在Adaptive PathE站上,一由 Jesse James Garrett?005q??8號所寫的文章中所提出?http://www.adaptivepath.com/publications/essays/archives/000385.php)。AJAX是客戶端(瀏覽?的技術,單的說Q就是用JavaScript與後端伺服器做資料的溝通,資料採用XML的格式,JavaScript動態地從後端拿到XML格式的資料,重新整理、重i後再顯C到E頁上。AJAX基本上是無關Java?Net的,甚至PHP也可以跟AJAXi合在一起用。網路上、雜誌介紹AJAX的文章相當的多,在這我׃贅述。在這要提醒大家注意的是Q因為AJAXQJavaScript又開始大量的應用在網頁Q前面所提及(qing)的亂又被突了(jin)Z。亂不一定只是負面的Q所時勢造英雄,我們期待有Z一i江湖?
JavaScript的其它應?/P>
JavaScript只能夠運用在E頁上嗎Q其實蘋(gu)果電?Apple)除了(jin)體上的剉|外,在作業系i׃的表現一直以來也是用者的最愛。在新的Mac OS X 10.4,有個新的功能叫-DashboardQ它可以讓你埯一些小E式Q例如月曆、天氣預報、地圖查扄。這些程式稱為WidgetQ而撰寫Widget的主要語a是JavaScriptQ當焉可以配合HTML、CSS甚至Java Applet。隨著Mac OS X的用者日益成P撰寫Widget已成Z個新興的軟體業。Dashboard其實不是W一個實t這個概늚E式Q早在Mac OS X 10.2時,有一個叫Konfabulator的軟體做出這樣的^収ͼ在當時大受歡q。後來Apple在Mac OS X 10.4內徏一樣功能的Dashboard時,還飽受外界的批評和指責,認為Apple是抄襲Konfabulator的。隨著Mac OS X直接支援WedgetQKonfabulator漸的E出Mac的舞台。不過Yahoo看上?jin)它Q把它買了(jin)下來Q而在不久前重新推出Windows/Mac版的Yahoo!WebgetQ這下Windows的用者也能n受Widget所帶來的便利和好處?/P>
下一?/P>
世界上有所的Java工程師、C/C++工程師、VB工程師等?Q好像沒有JavaScript工程師這樣的頭銜,我個h覺得他應該是被需要的。JavaScript其實並不好學Q教育訓R是個商,開發除錯q_也是一個商。這年頭流行認證,它也是可以著墨的Q例如辦理類似SCJP、MCSE這樣的認證考式(事實上是有JavaScript CertificationQ不過沒像其它認證這麼有公信和正式是?。唯有專門的訓R課E及(qing)認證才能真正落實JavaScript的標準化Q這樣寫出來的JavaScriptE式才不會相Ҏ(gu)不I造成用某E瀏覽器才能觀看的特定E頁的情況?/P>
而另一E是像無障礙E頁這種的認證,若你的網頁通過JavaScript相容性審合,那麼在網頁上可以放上一個標章,a明你的E頁是相Ҏ(gu)各種瀏覽器的。以上這些如果能由國際大廠來推動,成功的機會才會比較大Q好奇的是,這麼多年來,怎麼沒h惛_(gu)這g事?Q也a是吃力不討好吧?/P>
a:(x) TIOBE Programming Community Index for December 2005 http://www.tiobe.com/tpci.htm 盔R連結Q?/P>
ECMA-262
http://www.ecma-international.org/publications/standards/Ecma-262.htm
Spidermonkey
http://www.mozilla.org/js/spidermonkey/
Rhino
http://www.mozilla.org/rhino/
Dashboard
http://www.apple.com/macosx/features/dashboard/
Yahoo!Wedgets
http://widgets.yahoo.com/
Web正随着Amowa/Ajax的引入开发开始变得有!
Buffalo是Amowa思想实现的关键组件。Buffalo中定义了(jin)Webq程调用的传输基Qƈ且将q程调用对象完整的序列化C(jin)本地Q成为可以被JavaScript~程触及(qing)的对象。Buffalo中的重要lg - BuffaloBindingQ提供了(jin)JavaScript对象l定到HTML元素的能力。这U绑定将是无侵入的,只需要在HTML元素中加入若q个不媄(jing)响排版的属性,卛_数据与界面l定?
Buffalo1.1之前的版本重要的功能主要集中于远E调用与Java对象/JavaScript对象之间的双向序列化Q这个特性已l被众多的应用久l考验Q被认ؓ(f)是健壮的。它大大减少?jin)在Java对象与JavaScript对象之间需要考虑的细节,开发者可以更用心(j)地进行业务设计和界面设计?.2版本的推出,引入?jin)新的众多的?gu),包括Q新的重新改写的Spring集成Q与行javascript库prototype的集成;支持览器前q后退按钮Q等{。Buffalo努力使Web2.0的概念在q个小的轻量的框架中得到体现Q让你的应用具备更丰富的表现?
问题
可是在用Buffalo传输对象的过E中我发现Buffaloq不能够很好的传递用戯定义的对象,不光如此在与作者的讨论q程中我q发现很多的人对于JavascriptE序的规范根本不屑一,g选择?jin)Javascript本n是选择?自由~程"Q可是真的如此吗Q?/P>
其实Javascript是一个比较纯_的OO语言Qƈ不想一些报道中所说的那样Q对于封装、ѝ多态Javascript同样可以完成Q既然它是OO的语aQ就理所应当的按照某U规范来~写代码Q正?A >JavaScript說分?中说得那P~写Javascript不是一件简单的事情Q关键是很多Zؕ用了(jin)q个语言Q从而导致给很多的朋友以为写Javascript是很没有水准的事情Q偶以前也是如此Q,但我最q发现用Javascriptq样的动态语a没有一个很好的语言规范Q你开发出来的应用只能够停留在型pȝ之上Q而对于比较大型的应用开发,q样写出来得代买Ҏ(gu)无法复用Q?/P>
再来说说Buffalo传输对象的问题,以下是我自定义的Node对象
function Node(_id , _type)
{
//log("create node object!!!");
//============================== property =================================//
//=========================================================================//
var id = _id;
var type = _type; //<- type的出现在OO世界里本w就是背?BR> var brush = null //节点的物理表现句?BR>
var rList = new Array();//左节点列?BR> var lList = new Array();//双点列?BR>
var rLine = new Array();//节点的左U列?BR> var lLine = new Array();//节点的右U列?/P>
var x = 0;//节点的x坐标
var y = 0;//节点的y坐标
var m = false; //标识节点是否可移?BR> var r = false; //标识节点是否能够建立联系
var name = ""; //节点的名U?/P>
//================================ 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的时候Node对象Ҏ(gu)无法传递,而导致这个问题的原因竟然是我没有"自由的编写Javascript"Q其实问题就出在doStructXML Ҏ(gu)上,作者在q里有意?避开"?jin)这个问题,所以在传递Node的时候对于其U有的方法Buffalo是根本就不考虑的,FAINT!
原先
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;
},
修改?/P>
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")
{
/*判断Ҏ(gu)名称*/
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;
}
ȝ
1。Javascript的编写是否应该遵守一定的规范Q其实属于程序员自n休养的问题,但我q是觉得复用JAVA的编码规范不是坏事情Q?/P>
2。时刻记住Buffalo是徏立在burlap协议的基上的Q我们应该把注意力放在burlap上而不仅仅只是BuffaloQ?/P>