获取点击事件的图钉数据

时间:2013-10-18 12:42:56

标签: javascript windows-8 bing-maps winjs windows-8.1

我正在开发烟草店搜索器Windows 8.1商店应用程序。主要思想是,当用户打开应用程序时,地图会显示放大到他的位置。该地图将烟草店显示为图钉。这些商店的数据存储在具有以下结构的json文件中:

{
addr: Some street 12,
lng: longitude,
lat: lattitude,
open: {10:00-23:00, 20:00-22:00, and 5 more}
}

它包含商店的地址,纵向位置,纵向位置和营业时间。

这是我用来将图钉放在地图上正确位置的javascript代码:

var pins = [];

  $.getJSON(dbURL, function (response) {
        pins = response;
        $.each(pins, function (i, item) {
            var _location = new Microsoft.Maps.Location(item.lat, item.lng);

            var pin = new Microsoft.Maps.Pushpin(_location, { description: i, icon: markerImgURL, height: markerImgHeight, width: markerImgWidth, draggable: false });
            Microsoft.Maps.Events.addHandler(pin, 'click', showDetails);

            map.entities.push(pin);
        });
    });

我为每个引脚添加了一个点击处理程序,这样当用户点击(或触摸)一个图钉时,一个窗口就会显示有关它的详细信息。

这是我的showDetails()功能:

function showDetails() {
    var details = $("#details");

    details.animate({
        "right": parseInt(details.css("right")) == 0
                ? -1 * details.innerWidth() - 5
                : 0
    }, 500)
}

我的问题是,我真的不知道如何从该功能访问该单个引脚的数据。我添加了一个id作为引脚的描述,这将引用保存完整数据的“pins”数组,但如果我在showDetails(i)循环中调用$.each()之类的函数,应用程序会在启动时冻结。

tl; dr:如何在不向函数传递id的情况下从外部函数访问图钉的description属性?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的showDetails()事件处理程序将作为参数传递给事件对象。如果更新函数签名以接受此事件arg,则可以访问将作为图钉引用的目标对象。从那里您可以访问描述和其他属性

function showDetails(e) {
    var details = $("#details");    
    var smokeShop = e.target;

    WinJS.Utilities.setInnerHTML(details, smokeShop.description);

    details.animate({
        "right": parseInt(details.css("right")) == 0
                ? -1 * details.innerWidth() - 5
                : 0
    }, 500)
}