1

ここであまり混乱しないことを願っています。Backbone.js アプリケーションがあり、Openlayers を一緒に使用しています。

私はVectorViewを持っています。そして、そのビュー内に openlayers featuresAdded イベントがあります。そのイベント内で、ビュー (geoquery) で別の関数を呼び出そうとしています。以下のコードは機能しません。何か案は?

//event setup
this.layer.events.on({
"beforefeaturesadded": this.beforeFeaturesAdded,
"featuresadded": this.featuresAdded
});

featuresAdded: function(event){
    this.geoquery(polystring);      
},

geoquery: function(polystring){
}
4

1 に答える 1

1

この問題の最も可能性の高い原因は、OpenLayers がthisコールバック関数の正しいコンテキスト値を設定していないことです。イベントに登録するときはfeaturesadded、スコープ値を に提供する必要がありますevents.register

OpenLayersのドキュメントから:

register: function (type,obj,func,priority)

イベントがトリガーされると、「obj」のコンテキストで「func」関数が呼び出されます。OpenLayers.Bounds オブジェクトを「obj」として指定して、イベントを登録するとします。イベントがトリガーされると、コールバック関数のコンテキストが Bounds オブジェクトになります。これは、コールバック関数内で、「this」変数を介して Bounds オブジェクトのプロパティとメソッドにアクセスできることを意味します。

したがって、thisスコープがビューを指すようにする場合は、ビューを 2 番目の引数として渡す必要があります。ビュー内からイベントに登録していると仮定します。

layer.events.register('featuresadded', this, this.featuresAdded);

または、ビューの外から:

layer.events.register('featuresadded', view, view.featuresAdded);
于 2013-02-26T21:03:14.083 に答える