Bing Map v8 - 取消选择所选的图钉事件

时间:2016-06-30 13:19:49

标签: javascript events bing-maps

Bing有一个2个eventStyles用于图钉。

  • enableHoverStyle:Boolean
  • enableClickedStyle:Boolean

转到下面的链接,查看这些活动/样式 http://www.bing.com/api/maps/sdk/mapcontrol/isdk#setPushpinOptions+JS

因此,当我选择另一个引脚时,我想要完成的是取消选择已经选择的引脚。有没有办法做到这一点?

编辑:

我找到了一个解决方案,不确定它是否是最佳的,但现在就是。

我在图钉点击

上触发了事件
Microsoft.Maps.Events.addHandler(pushpin, 'click', togglePinState);

然后,togglePinState函数

function togglePinState(pinData){

        if(pinData.target == null)
            return;

        if(selectedPin == null){
            selectedPin = pinData.target;
            selectedPin.setOptions({enableClickedStyle: true});
            return;
        }
        if(pinData.target != selectedPin){
            selectedPin.setOptions({enableClickedStyle: false});
            selectedPin = pinData.target;
            selectedPin.setOptions({enableClickedStyle: true});
        }
    }

1 个答案:

答案 0 :(得分:1)

在使用eventStyles内置的bing-v8时,我没有看到任何代码解决这个特殊情况,所以我希望这有助于某人。

这是我原始帖子中的新代码。这对我来说完全没问题。除非它不允许您取消选择引脚。更新代码允许您执行此操作,如下所示。

function togglePinState(pinData){

        if(pinData.target == null)
            return;

        if(selectedPin == null){
            selectedPin = pinData.target;
            PopulateSidePanel(selectedPin)
            return;
        }
        // Checks if the pin that triggered the event is not equal to the selected pin if so, we change states of both pins.
        if(pinData.target != selectedPin){
            selectedPin.setOptions({enableClickedStyle: false});
            selectedPin.setOptions({enableClickedStyle: true});
            selectedPin = pinData.target;
            PopulateSidePanel(selectedPin)
        }       
    }

更新1

添加了何时只需将当前所选内容切换为取消选择状态的功能。

function togglePinState(pinData){

        // Just in case
        if(pinData.target == null)
            return;

        // There is no selected Pin so we just assign the first pin to be the selectedPin
        if(selectedPin == null){
            selectedPin = pinData.target;
            PopulateSidePanel(selectedPin)
            return;
        }
        // Checks if the pin that triggered the event is not equal to the selected pin if so, we change states of both pins.
        else if(pinData.target != selectedPin){
            selectedPin.setOptions({enableClickedStyle: false});
            selectedPin.setOptions({enableClickedStyle: true});
            selectedPin = pinData.target;
            PopulateSidePanel(selectedPin)
        } 
        // if the pin that triggered the event is equal to the selected pin then we set everything to null.
        else {
            selectedPin = null;
            PopulateSidePanel(null);
        }       
    }