Javascript 在修改交互时取消侦听事件,并在侦听后重新激活

Javascript 在修改交互时取消侦听事件,并在侦听后重新激活,javascript,openlayers-3,Javascript,Openlayers 3,我又在为unByKey/ol.可观察的东西挣扎 我有一个用于创建弹出窗口的事件侦听器 var unByKeyPopup; unByKeyPopup = map.on('click', function (evt) { ... }); 然后我有一个修改交互,当复选框设置为true时,该交互被激活 function xyz() { .... $('#checkbox').on('click', function () { if(this.checked) { modify

我又在为unByKey/ol.可观察的东西挣扎

我有一个用于创建弹出窗口的事件侦听器

var unByKeyPopup;
unByKeyPopup = map.on('click', function (evt) {
  ...
});
然后我有一个修改交互,当复选框设置为true时,该交互被激活

 function xyz() {
  ....

 $('#checkbox').on('click', function () {
  if(this.checked) {
    modifyVectorInteraction();
    $('#checkbox').un('click', unByKeyPopup);  //????? dont activate the Popup thing while the user is in modify interaction
  } if(!this.checked) {
    map.removeInteraction(modifyinteraction);  
    $('#checkbox').on('click', unByKeyPopup);  //????? ok, modify done, lets re-activate the Popup 
  }
  ...
 });
 ...
}
嗯。。。这不管用。我做错了什么


谢谢

您尝试的方法不正确,请改用:

更新:

而不是:

unByKeyPopup = map.on('click', function (evt) {
  ...
});
创建生成作业的函数:

var popupFunction = function(evt){
    //...
};
和有功/无功it,包括:

unByKeyPopup = map.on('click', popupFunction);

好的,我有一个popop侦听器的解决方案。我在图层中添加了一个属性:
nopopup:true
并具有以下atm:
unByKeyPopup=map.on('click',function(evt){function(feature,layer){if(layer.get('nopopup')!==true){…
它或多或少可以工作,但更优雅的是unByKey解决方案谢谢你,你是对的。但是我以后如何重新激活弹出窗口?我必须用ol.Observable做这件事吗?嗯。好的,这对我帮助很大。谢谢。我稍后会尝试理解为什么会这样。如果它缺少什么,请告诉我。不客气,可以接受正确的答案。
unByKeyPopup = map.on('click', popupFunction);