NoGray Time Picker与Google Maps api

时间:2015-06-09 19:00:51

标签: javascript google-maps

我有一个页面上有NoGray Time Picker控件和Google地图实现。如果我删除NoGray时间选择器,Google地图效果很好(渲染,显示地图点等)。但是当我包含NoGray Time Picker时,我收到以下javascript错误:

Uncaught TypeError: Cannot read property 'kc' of undefined

当我使用Chrome进行调试时,它会在调用堆栈的基础上显示NoGray对Function prototype的扩展。这个错误发生在Google API代码中......

没有泄露他们的大部分代码(但希望任何人都可以找到/重现)......我在谈论ng_all.js中的以下内容:

ng.extend_proto(Function, { set: function(
[...] //removed several lines
return a.apply(f, h.concat(d))

这一切都在第一次实现时起作用,但现在正在给出错误(我们的结尾没有任何代码更改),这导致地图无法正确渲染(有时没有地图点,有时根本没有地图)。有任何想法吗?无论如何都要保持这个原型扩展不影响Google Map功能吗?

1 个答案:

答案 0 :(得分:1)

NoGray正在延长Function.prototype?对他们感到羞耻!

我查看了他们的代码,他们为Function.prototype添加了几种方法:setbinddelayrepeatdeferinheritrename_method

最令人担忧的是Function.prototype.bind()。现代浏览器已have a Function.prototype.bind() method!它与NoGray定义的不一样。

因此,当包含NoGray并且它会覆盖该方法时,任何试图使用标准.bind()的代码都将被破坏。

我不知道这是什么打破谷歌地图,但它根本不会让我感到惊讶。

这里最好的解决方案就是抛弃这个表现不佳的库,找到另一个不踩这样的标准JavaScript方法的时间选择器。

但是,如果您想尝试实验,则可以进行搜索并替换并将NoGray代码中的bind的所有实例更改为bindx或类似的内容。这样可以避免标准.bind上的冲突,如果我的理论是正确的,它可能会解决这个问题。

哦,等等。它变得更糟。他们也扩展了一堆其他标准原型!除了Function之外,它们还扩展了RegExpArrayStringNumberDate的原型!!!

(这是我第一次使用" !!!"在Stack Overflow回答中,但它在这里当之无愧。)

我没有耐心查看他们添加到这些原型中的所有方法以查找潜在的冲突,但是如果将bind更改为bindx则无法修复它,您可以浏览所有其他原型扩展,找到每个本机对象的MDN文档页面,并查看是否有任何其他标准方法被覆盖。

或者,正如我之前所说,只是放弃了这件事!