2011-07-02 59 views
0

基本上,我想爲google.maps.Map和Rectangle類添加一些自定義方法。 我不能這樣做,所以我決定把包裝類,但我遇到了一個問題擴展谷歌地圖api類(或製作包裝)

function MyClass() { 

    this.redraw_map = function() {draw something}; 
    this.current_map = new google.maps.Map(); 

    google.maps.event.addListener(this.current_map, 'bounds_changed', function() { 
    redraw_map(); 
    }); 
} 

我redraw_map()方法是沒有看到在事件處理函數,除非我把拉法在MyClass之外。 我已經計劃改用更高級的方式編寫JS應用程序,比如Backbone,但首先我需要了解如何克服這些問題。

感謝您的閱讀。

回答

1

發生這種情況是因爲傳遞給addListener的回調函數在其當前範圍中沒有定義函數redraw_map()。解決方法是在回調之外保留對MyClass作用域的引用,允許您從回調中調用它。

這將解決您的問題:

function MyClass() { 

    this.redraw_map = function() {draw something}; 
    this.current_map = new google.maps.Map(); 

    // Reference to current scope 
    var self = this; 

    google.maps.event.addListener(this.current_map, 'bounds_changed', function() { 
     // This will call the function that you defined in your scope above 
     self.redraw_map(); 
    }); 
} 
+0

謝謝您的回答。我開始用CoffeeScript編寫我的代碼,並理解「.this」是如何工作的以及綁定函數時如何傳遞它。 –