0

私は標準的な方法を試しました:

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

しかし、この場合、プレースホルダーは空でした。

4

1 に答える 1

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);

ほとんどの場合、特に「extendee」が CoffeeScript で記述されている場合、これはうまく機能します。

しかし、google.map.Maps の場合、(私が推測するに) スコープ操作が大量に行われており、CoffeeScript が設定しようとしているスコープを取り消すようなものです。確かにこれは推測です。

したがって、この場合は、古き良き JavaScript の帽子をかぶって、コンストラクターで単純な古いスコープロックを行うときです。superそのため、JavaScript の行を使用して、apply関数をクラスのスコープにドロップします。CoffeeScript は手を振ったり、微笑んだりして、JavaScript の行をそのまま出力します。

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

わかる?

于 2012-11-17T22:02:36.133 に答える