1

作成中のアプリケーション用に Google Earth プラグイン API を試しています。地図から目印を削除できるようにしたい。これを行う最も簡単な方法は、「削除」リンクを含むバルーン ポップアップを作成することですが、削除の方法がわかりません。

balloon.setContentString(
'Location: ' + event.getLatitude().toString() + ", " +
event.getLongitude().toString() + '<br />&nbsp;<br />' +
'<a href="#" onclick="ge.getFeatures().removeChild(event.getCurrentTarget())">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');

これにより、次の結果が得られます。

Uncaught TypeError: Object #<MouseEvent> has no method 'getCurrentTarget' earth2.html:1 onclick

(ご覧のとおり、名前を変更できるようにしたいのですが、削除することを理解したときに、おそらくそれを理解するのはそれほど難しくありませんか?)

コード全体は次の場所にあります。

http://chrishowells.co.uk:81/earth2.html

ブロック全体:

google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
if (event.getTarget().getType() == 'KmlPlacemark' &&
    event.getTarget().getGeometry().getType() == 'KmlPoint') {
  // don't show the default popup
  //http://code.google.com/apis/ajax/playground/?exp=earth#javascript_in_balloons
  event.preventDefault();

var balloon = ge.createHtmlStringBalloon('');
balloon.setFeature(event.getTarget());
//balloon.setMaxWidth(300);

balloon.setContentString(
  'Location: ' + event.getLatitude().toString() + ", " +
event.getLongitude().toString() + '<br />&nbsp;<br />' +
'<a href="#" onclick="ge.getFeatures().removeChild(event.getCurrentTarget())">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');
ge.setBalloon(balloon);

var placemark = event.getTarget();

dragInfo = {
    placemark: event.getTarget(),
    dragged: false
  };
}
});
4

1 に答える 1

1

あなたが得ているエラーは、問題が何であるかを正確に伝えています。

 Object #<MouseEvent> has no method 'getCurrentTarget'

問題onclickは、アンカーのイベント ハンドラー内でevent変数リファラーが目印をクリックするのではなく、リンクをクリックすることです。つまりevent、KmlMouseEvent ではなく DOM マウス イベントです。

また、KMLEvent が最初にディスパッチされたオブジェクトを参照するために呼び出す必要があるメソッドは ですgetTarget

KmlEvent.getTarget の API ガイドを参照してください: https://developers.google.com/earth/documentation/reference/interface_kml_event#adfee4d0797ff7d437e77c649673f9ffc

これを修正するには、いくつかのことを行う必要があります。まず、現在の目印のクリック イベントを保持するグローバル変数を定義します。変数を定義するスクリプトの先頭でこれを行い、ge変数も追加しcurrentEventます。すなわち

var ge = null; 
var currentEvent = null;

次に、mousedownリスナーを修正して、バルーン内の JavaScriptcurrentEventが定義した変数を参照できるようにする必要があります。

最後に、currentEvent変数を使用して Placemark を参照し、バルーン内のコードを使用して Placemark を削除する必要があります。

例えば。

google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {

    if (event.getTarget().getType() == 'KmlPlacemark' &&
    event.getTarget().getGeometry().getType() == 'KmlPoint') {
        currentEvent = event; // used in the balloon content string
        event.preventDefault();

        var balloon = ge.createHtmlStringBalloon('');
        balloon.setFeature(event.getTarget());

        balloon.setContentString(
        'Location: ' + event.getLatitude().toString() + ", " +
        event.getLongitude().toString() + '<br />&nbsp;<br />' +
        '<a href="#" onclick="ge.getFeatures().removeChild(currentEvent.getTarget());ge.setBalloon(null);">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');
        ge.setBalloon(balloon);

        dragInfo = {
            placemark: event.getTarget(),
            dragged: false
        };
    }
});

これを完全にテストしたところ、目印をクリックすると AOK で動作deleteし、現在のバルーンが閉じます。

于 2012-08-27T12:38:13.320 に答える