如何使用coffeescript扩展google.maps.Map

时间:2012-11-17 07:15:14

标签: javascript google-maps-api-3 coffeescript extends

我尝试过标准方法:

class MyMap extends google.maps.Map
  constructor: (mapDiv, opts)->
    super(mapDiv, opts)

但在这种情况下占位符是空的。

1 个答案:

答案 0 :(得分:1)

此问题是CoffeeScript创建类的方式以及Google Maps Javascript API的编写/混淆/缩小方式的组合。

当CoffeeScript扩展一个类时,它会创建类似于此的代码:

customnamespace.CustomMap = (function(_super) {

    // '__extends' is a method that gets output at the 
    // top of every CoffeeScript compiled file
    __extends(CustomMap, _super);

    function CustomMap(mapDiv, opts) {
        CustomMap.__super__.constructor.apply(this, arguments);
    }

    return CustomMap;

})(google.maps.Map);

在大多数情况下,特别是在使用CoffeeScript编写“extendee”的情况下,这非常有效。

但是在google.map.Maps的情况下(我怀疑)正在进行一大堆范围操作,这有点取消了CoffeeScript尝试设置的范围。不可否认,这是一个猜测。

所以在这种情况下,是时候加上你的JavaScript帽子,只是在构造函数上做一些简单的旧范围锁定。因此,请使用一行JavaScript将您的superapply函数放入类的范围内。 CoffeeScript将按原样挥动,微笑并输出JavaScript行。

class MyMap extends google.maps.Map
    constructor: (mapDiv, opts)->
        google.maps.Map.apply(this, [mapDiv, opts]);

有意义吗?