2012-11-17 33 views
0

我曾嘗試標準的方式擴展google.maps.Map:如何與CoffeeScript的

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

但在這種情況下,佔位符是空的。

回答

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的帽子,只是在構造函數上做一些普通的舊的作用域鎖定。因此,使用一行JavaScript將您的superapply函數放在該類的範圍內。 CoffeeScript將會按照原樣揮動,微笑並輸出JavaScript行。

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

有意義嗎?

+0

謝謝,我使用了類似的解決方案:google.maps.Map.call(this,$('#map_canvas')[0],opts) – mahnunchik