私は標準的な方法を試しました:
class MyMap extends google.maps.Map
constructor: (mapDiv, opts)->
super(mapDiv, opts)
しかし、この場合、プレースホルダーは空でした。
私は標準的な方法を試しました:
class MyMap extends google.maps.Map
constructor: (mapDiv, opts)->
super(mapDiv, opts)
しかし、この場合、プレースホルダーは空でした。
この問題は、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]);
わかる?