2011-07-02 18 views
0

基本的に、いくつかのカスタムメソッドをgoogle.maps.MapクラスとRectangleクラスに追加したいと考えました。私はラッパークラスを作ることにしたので、 私は、それを行うことができませんでしたが、私は一つの問題に遭遇したgoogle map 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アプリケーションを書くより高度な方法に切り替えるつもりですが、まずこのような問題を解決する方法を理解する必要があります。

読んでいただきありがとうございます。

答えて

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"がどのように動作し、どのようにバインディング機能を渡すかを理解しました。 –

関連する問題