обрабатывать событие onchangeview для карт Bing - PullRequest
4 голосов
/ 23 ноября 2010

Я пытаюсь обработать событие onchangeview для карт bing

В методе js intialize у меня есть следующий код:

map = new Microsoft.Maps.Map(document.getElementById("mapviewer"), {
    credentials: bingMapsKey, 
    center : new Microsoft.Maps.Location(42.3508, -71.0717),
    zoom: 12
    });
//Microsoft.Maps.Events.addHandler(map, "onchangeview", handleChangeView);
Microsoft.Maps.Events.addHandler(map, "onclick", handleChangeView);
mapviewer.attachEvent("onchangeview", handleChangeView);

У меня также есть эта функция

function handleChangeView (e) {

}

эта функция никогда не вызывается, и я не уверен, почему, поскольку обработчик настроен правильно.

Я также не надеваюНе понимаю разницу между следующими двумя строками и тем, когда я должен прикрепить событие тем или иным способом

Microsoft.Maps.Events.addHandler(map, "onclick", handleChangeView);
mapviewer.attachEvent("onchangeview", handleChangeView);

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 03 декабря 2010

Многие события были переименованы в 7, я думаю, что вы хотите использовать " click " вместо " onclick " и " viewchangeend " вместо " onchangeview ».

В зависимости от того, для чего вам это нужно, вы можете предпочесть события " viewchangestart ", " viewchange " или " targetviewchanged ".


Кроме того, вы обязательно должны использовать « Microsoft.Maps.Events.addHandler » для установки слушателей на 7, все события теперь используют объект Events.


Пример: * * тысяча двадцать-пять

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0" type="text/javascript" charset="UTF-8"></script>
</head>
<body onload="init()">

<div id="map" style="position: relative; width: 800px; height: 350px;"></div>   


<script type="text/javascript">

/**
 * Map click event handler.
 */
function onclick(e){
    var map = this.target; //reference to the Map object from which it came
    //...
    var x = e.getX(); // horizontal position of the click
    var y = e.getY(); // vertical position of the click
    //...
    console.log('The map has been clicked');
}

/**
 * View change event handler.
 */
function onview(){
    var map = this.target; //reference to the Map object from which it came
    //...
    console.log('The view has changed');
}

/**
 * Load the map and setup event listeners
 */
function init(){
    var map = new Microsoft.Maps.Map(
        document.getElementById("map"),
        {
            credentials: "YOUR-BING-KEY",
            mapTypeId: Microsoft.Maps.MapTypeId.road
        }
    );
    Microsoft.Maps.Events.addHandler(map, "click", onclick);
    Microsoft.Maps.Events.addHandler(map, "viewchangeend", onview);
}

</script>


</body>
</html>

Список событий (внизу страницы): http://msdn.microsoft.com/en-us/library/gg427609.aspx

1 голос
/ 10 декабря 2010

Вы также можете определить новое событие одновременно с добавлением:

Microsoft.Maps.Events.addHandler(map, "click", function(args) {
    ...
});

Значение args будет зависеть от объекта и события, которое вы используете. В данном случае это объект MouseEventArgs (http://msdn.microsoft.com/en-us/library/gg406731.aspx).

...