0
我曾嘗試標準的方式擴展google.maps.Map:如何與CoffeeScript的
class MyMap extends google.maps.Map
constructor: (mapDiv, opts)->
super(mapDiv, opts)
但在這種情況下,佔位符是空的。
我曾嘗試標準的方式擴展google.maps.Map:如何與CoffeeScript的
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的帽子,只是在構造函數上做一些普通的舊的作用域鎖定。因此,使用一行JavaScript將您的super
和apply
函數放在該類的範圍內。 CoffeeScript將會按照原樣揮動,微笑並輸出JavaScript行。
class MyMap extends google.maps.Map
constructor: (mapDiv, opts)->
google.maps.Map.apply(this, [mapDiv, opts]);
有意義嗎?
謝謝,我使用了類似的解決方案:google.maps.Map.call(this,$('#map_canvas')[0],opts) – mahnunchik