首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mootools毁了我的全局!Google Maps + Mootools

Mootools毁了我的全局!Google Maps + Mootools
EN

Stack Overflow用户
提问于 2011-01-30 05:03:31
回答 3查看 782关注 0票数 1

我正在使用Mootools来做一些事情,比如谷歌地图应用程序中的碰碰盒之类的东西。在我添加Mootools脚本之前,无论我是在声明全局变量之前还是之后添加脚本都没有关系,Mootools会杀死them...take一看代码片段

代码语言:javascript
复制
<script language="javascript" type="text/javascript" src="mootools.js"></script>
<script language="javascript" type="text/javascript" src="bumpbox.js"></script>

<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript">
</script>
<script type="text/javascript">

    var currentBounds;
    var currentMarker = null;
    var currentInfo = null;
    var markersArrayProps = [];
    var markersArrayAreas = [];
</script>

有很多more...but,这只是说明了发生了什么,如果我删除调用mootools.js的代码行,一切都会正常工作。在XMLHTTPRequest过程中,markersArrayProps基本上是这样填充的:

代码语言:javascript
复制
markersArrayAreas.push(marker);

然后有一个idle地图的事件侦听器,它会进行一些计算,看看是否应该删除区域标记,并根据地图的边界加载属性标记。不需要详细介绍,只要调用这个idle函数,我就像这样遍历数组:

代码语言:javascript
复制
function clearAreaOverlays() {
  if (markersArrayAreas) {
    for (i in markersArrayAreas) {
      markersArrayAreas[i].setMap(null);
    }
  }
}

它返回markersArrayAreas[i].setMap()不是一个函数。只有在页面中包含mootools脚本时,如果我删除mootools,一切都会正常工作。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-30 05:59:32

好的,感谢大家的参与,特别感谢Jason指出了mootools array prototype....using mootools .each函数

代码语言:javascript
复制
    markersArrayAreas.each (function (item){
        item.setMap(null);
    });
票数 1
EN

Stack Overflow用户

发布于 2011-01-30 05:21:19

解决这个问题的最简单方法是使用以下模式重写循环:

代码语言:javascript
复制
for(var i=0,l=markersArrayAreas.length, i<l, i++) { if(i in markersArrayAreas) { ... } }

看起来您正在使用markersArrayAreas作为标准的整数索引数组。因此,您不应该使用(for i in array)模式来遍历它。首先,它的效率远低于使用基于索引的计数循环。

此外,此模式还会遍历对象的所有成员。在您的示例中,MooTools使用一些更多的自定义函数扩展了数组原型,因此每当您创建数组时,除了编号的数组值之外,对象中现在还有其他属性。如果您打印i的值,您应该看到它不再仅仅是数字。

您可以通过检查每个属性名是否引用了不是使用hasOwnProperty函数从原型继承的属性来解决此问题,但同样,这样做的效率要比。

有关显示这些不同循环构造的相对性能的快速基准测试,请参阅此处:http://jsperf.com/for-in-test

票数 4
EN

Stack Overflow用户

发布于 2011-01-30 05:23:13

您可以命名这些全局变量。这将需要一些返工,但它可以保证您的内容不受其他脚本的影响:

代码语言:javascript
复制
var my_globals_with_a_very_unique_name_mf = {
    // redeclare all your variables in here
}

然后,每当您引用这些变量时,只需进入对象:

代码语言:javascript
复制
my_globals_with_a_very_unique_name_mf.markersArrayProps
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4839412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档