Не удается удалить пользовательский элемент управления из карт Google - PullRequest
3 голосов
/ 17 мая 2011

В моем мобильном приложении HTML5 я использую некоторые jquery, чтобы скрыть или показать некоторые пользовательские элементы управления, в зависимости от того, вошел ли пользователь в систему:

В основном код следующий:
-> одна функция'createCustomControls' отвечает за вызов нескольких раз другой функции 'createCustomControl' (без 's').

function createCustomControls(map){
  createCustomControl("about", map);
  if(!authenticated()){createCustomControl("login", map);}
  if(authenticated()){ createCustomControl("menu", map);}
  if(authenticated()) {createCustomControl("list", map);}
}

function createCustomControl(type, map){
  // Create a div to hold the controls
  var controlDiv = document.createElement('DIV');
  controlDiv.style.padding = '2px';
  controlDiv.index = 1;

// Set CSS for the control border
var controlUI = document.createElement('DIV');
controlUI.style.backgroundColor = '#FFF';
controlUI.style.borderStyle = 'solid';
controlUI.style.borderWidth = '1px';
controlUI.style.cursor = 'pointer';
controlUI.style.textAlign = 'center';
controlUI.title = type.capitalize();
controlDiv.appendChild(controlUI);

// Set CSS for the control interior
var controlText = document.createElement('DIV');
controlText.style.fontFamily = 'Arial,sans-serif';
controlText.style.fontSize = '18px';
controlText.style.paddingLeft = '4px';
controlText.style.paddingRight = '4px';
controlText.innerHTML = type.capitalize();
controlUI.appendChild(controlText);

// Add event listener on click
if(type == "list"){
  google.maps.event.addDomListener(controlUI, 'click', function() {
    ....some stuff
  });
}
if((type == "menu") || (type == "login") || (type == "about")){
  google.maps.event.addDomListener(controlUI, 'click', function() {
    $.mobile.changePage("#" + type, "slideup");
  });
}

// Add control to map
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controlDiv);
}

Это работает правильно при первом вызове createCustomControls:
-> login'и' о 'пользовательских элементов управления созданы.

Когда пользователь вошел в систему, я в другой раз вызываю функцию createCustomControls.Он помещает пользовательские элементы управления (меню, список, сведения о) рядом с элементами 'login' и 'about'.

Я пробовал несколько вещей, чтобы очистить позицию TOP_RIGHT, чтобы избавиться от 'login' и 'about'элементы управления перед вставкой' menu ',' list 'и' about ', но ни один из них не работает ....

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 18 июня 2013

Я использую этот код для поиска определенного элемента управления (с идентификатором элемента 'mapHintDiv'):

var indexOfControl = null,
    bottomCenterControls = map.controls[google.maps.ControlPosition.BOTTOM_CENTER];
bottomCenterControls.forEach( function ( element,
                                         index ) {
   if( element.id === 'mapHintDiv' ) {
      indexOfControl = index;
   }
} );
if( indexOfControl ) {
   bottomCenterControls.removeAt( indexOfControl );
}
2 голосов
/ 18 мая 2011

map.controls [position] является MVCArray.Использование removeAt () или clear () должно выполнить задачу.

http://code.google.com/apis/maps/documentation/javascript/reference.html#MVCArray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...