作者:CrespoShi,原文出处: http://www.blogjava.net/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 阅读(2709)
评论(5) 编辑 收藏