Клуб API Карт

MODx, Я.Карты и скрытый див

Пост в архиве.

Добрый день. Понимаю, тема наболевшая и не раз обсуждавшеяся тут но, всё же, ещё раз давайте разберёмся.

Основная проблема в том, что Я.Карты в MODx выводятся только через плагин. Никаких особых проблем при простом выводе не наблюдается. Но, мне надо вывести карту из скрытого дива и тут начинаются пляски с бубном. Естественно, я читал документацию и в курсе, что нужно вызвать map.redraw(, однако, как я не пытался это сделать, куда бы я его не вставлял и откуда бы не вызывал - у меня не получается.

Исходные данные: MODx 1.0.5, плагин Yandex_map_0.9_beta и табы, реализованные с помощью jQueryUI (весрия jquery 1.5.2) и всё это лежит на тестовом домене.

Заранее спасибо за мысли, идеи и советы.

7 комментариев

Основной поинт в том что нужно слушать событие открытия таба и в обработчике вызывать map.redraw()

 

$('#info').bind('tabsshow', function(event, ui) {
    if (ui.panel.id == "change-map-visibility") {
        map.redraw();
    }
});

 

в этой строке

$('info').bind('tabsshow', function(event, ui) {

надо писать именно

$('#info').bind('tabsshow', function(event, ui) {

Упс... Да, спасибо. Но всё равно, пока что, как то не сильно получается.

 

прочитайте чтоли доку по javascript

 

window.onload = function () {            var map = ...

 

при такой записи map будет видна только внутри функции

и не будет видна в вашем обработчике открытия таба

 

перенесите ваш обработчик внутрь window.load

теб более что там где он сейчас - он не отработает тк DOM еще не загрузился и элемента $('#info') в нем нет

Уважаемый  , во первых, плагин писал не я, и переписать его у меня, на данный момент, получится вряд-ли, в связи с моими скромными знаниями javascript и jquery.

Во-вторых, вы, видимо, увидели код в тот момент, когда я уже от отсутствия вариантов пробовал его вставлять хоть куда нибудь, по принципу "ну хоть откуда-то он должен заработать...?!?!?!?".

Да, я понимаю, что он должен быть внутри window.onload, я так же понимаю, что он должен отрабатывается после плоной загрузки DOM. И в начале я его туда и вставлял. Резултат - 0. Возможно, я его не из той функции window.onload вызываю? Хотя она, судя по всему, тут одна, да и firebug (ver.1.7.0, firefox 4 win,linux) ошибок не показывает.

 

Я в полном замешательстве хоть и понимаю, что ошибка тут "детская". Не могли бы вы, ещё раз, взглянуть на код и подсказать мне чуть более конкретно в чём моя ошибка и куда, в данном случае, будет правильным поставить вызов:

$('#info').bind('tabsshow', function(event, ui) {
    if (ui.panel.id == "change-map-visibility") {
        map.redraw();
    }
});

 

дабы получить требуемый результат.

Заранее спасибо.

зачем вам тут вообще window.onload?

Он отрабатывает после загрузки не только DOM но и всех изображений

так что смысла в нем нет

 

у вас есть уже обработчик загрузки DOM

добавьте ваш код в него

   $(document).ready(function(){
    $("#info").tabs();
}); 

 

Раз уж вы поставили файербаг - посмотрите что у вас приходит в ui.panel.id

у вас это условие не отрабатывает и map.redraw(); не выполняется

 

Я конечно могу написать всё за вас, но профита вам от этого будет 0.

 

 

 


 

 

А что значит "только через плагин" Зачем плагин то?


И просто в tv adcom пишите адрес обьекта... а уж вывод может быть в любом виде, хоть в окошке, хоть где.