作者:CrespoShi,原文出處: http://www.tkk7.com/crespo9907/archive/2007/03/23/mapeasy_answer6.html,轉載請保留。
山茶:
你好!
我想在雙擊時獲得當前視圖的bound,在雙擊事件中添加status = MapModel.bound;可是只是得到原始的bound
// 在地圖上加入雙擊事件
MapEvent.addListener(map, MapEvent.DBLCLICK, function(e) {
?var coord = MapEvent.getEventCoord(e, map);
?var marker = new Marker(coord.getPoint(), Marker.LARGE);
?map.addOverlay(marker);
?marker.setInfo("Hello! it's marker: <a href=\"
http://www.hymake.com\" target=\"_blank\">#" + marker.getId() + "</a>");
status = MapModel.bound;//添加
});
?
這是怎么回事,貌似我沒有得到當前對象,具體怎么搞?謝謝兄弟!
????????對于山茶的這個問題可能需要搞清楚這樣幾個概念:
??????1. 在MapModel類中bound屬性被當作一個類似于Java中的靜態變量在使用(注意這里的實質其實和Java的靜態變量完全不同,在內存中每個MapModel實例仍然有自己的一份bound代碼和數據),而當前可視的區域其實是另外一個實例變量viewerBound。
??????2. status = MapModel.bound;中直接使用MapModel是不對的,因為在創建地圖對象時候new了一個MapModel實例:??this.mapModel = new MapModel(this.mapId);(見MapBuild.js)這個方法的MapModel實例也就是作為第一個參數傳入的map。
??????綜上所述:這里應該由以下方法來得到當前區域。
??????status = map.getViewerBound();
??????最后提醒山茶一個問題,在設置或者取得某對象的私有屬性時最好使用getX()/setX()方法,雖然在JavaScript中并沒有私有變量的概念,并且無法直接定義作用域(雖然一些JavaScript高手用各種各樣變通的方式實現了作用域),在編碼過程中還是要遵循這些基本準則。
??????JavaScript的語法和Java等比起來雖然顯得不那么規范和嚴謹,單正是一些靈活的特性吸引了我們。但是在實際編碼過程中還是要盡量遵循OO編程的基本準則,以免陷入“JS泥潭”。
??????只能說以我的JS經驗來看,它確實是一種很有意思,并且非常強大的語言,并不象很多人認為的拿不上臺面,JS同樣可以做復雜的應用,并且在熟手手里JS代碼的產出效率也是異常高的。只是因為各方面的原因可能在調試和維護方面有些不盡人意之處,相信越來越多的業界廠商的關注會改變這種現狀。現在不都已經有了很多非常優秀的IDE和瀏覽器插件嗎?
??????推薦兩款JS開發相關的軟件給大家:aptana,FireBug
??????apatana作為一個基于Eclipse的優秀JS IDE對提高JS開發效率是無容置疑的,如果你使用Eclipse直接升級個插件就OK,如果你并不使用Eclipse,甚至你更本就不是一個Javaer,或者你根本就不是一個程序員而是設計師,也沒關系。apatana想的很周到,你可以下載到安裝版本,直接給你把精簡的Eclipse也裝了。不過你還是需要個JRE哦。
??????FireBug作為FireFox下無敵的開發者插件相信大家也不會陌生,如果你還不知道只能說太可惜了,趕快用用吧,你會發現對調js和頁面的效率不僅僅是提高幾倍的問題。
??????本來是回答山茶的問題,有點扯遠了,呵呵。不過上面兩款絕對值得推薦。它們的用法和教程我想google上很多了,至于它們的好處你用了就會知道。
??????JavaScript絕對是2007最值得深入學習的語言之一!
??????你還沒有開始學習JavaScript?那你還在等什么?!
posted on 2007-03-23 23:36
cresposhi 閱讀(2714)
評論(5) 編輯 收藏