Клуб API Карт

YandexMap как редактор карт для XAF (проблемы с Callback)

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

Всем привет!

 

Я разрабатываю приложение на движке DevExpress XAF (C#) и пытаюсь интегрировать YandexMap как PropertyEditor для полей типа System.String. В предыдущих версиях всё прекрасно работало, но начиная с версии DX 11.2, они изменили архитектуру WEB приложения и теперь старницы редакторов загружаются посредством Ajax (частичная перегрузка страницы). Тоесть с технической стороны это выглядит так: Пользователь прожимает кнопку выбора редактора в меню слева, а в центральную зону посредством Ajax подгружается редактор состоящий из определённых полей, вместе с ним и YandexMap редактор, который я написал, НО при инициализации получается ошибка инициализации карты, чтото типа YMaps не найден! Кусок JavaScript кода который приходит посредством Ajax следующий (частично):

 

=========================================

<script id="dxss_676113695" type="text/javascript">\n<!-\-\nTestFunc(\n//-\->\n<\/script><script id="dxss_654567734" type="text/javascript">\n<!-\-\nscrollControlOnLoadCore(\'Sc_xPos\', \'Sc_yPos\', \'\');\n//-\->\n<\/script><script id="dxss_2014936782" type="text/javascript">\n<!-\-\n$(document).ready(function () {alert(\'Test Alert\');map = new YMaps.Map($("#VSC_MainLayoutEdit_xaf_l9_YandexMap")[0]);map.setCenter(new YMaps.GeoPoint(37.7558669261635 , 44.7483376300636), 15);}\n//-\->\n<\/script><script id="dxis_1461914008" src="http://api-maps.yandex.ru/1.1/index.xml?key=AIK6a00BAAAAoWiiawIAH6lC5xN1crSgT1_KSuq-LRcMjZIAAAAAAAAAAADVdw3HWGobdWUvwTo43gYiA5_-ow==" type="text/javascript"><\/script><script id="dxis_494010059" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"><\/script><script id="dxis_685934111" src="JScript1.js" type="text/javascript"><\/script>
=========================================


DIV контейнер с id="VSC_MainLayoutEdit_xaf_l9_YandexMap" я здесь не привожу т.к. он в порядке.

Естественно, что перед тем как запостить вопрос сюда я общался с поддержкой из DevExpress, вот мой тикет: http://www.devexpress.com/Support/Center/Issues/EditIssue.aspx?issueid=Q357379

Судя по ответам поддержки проблема заключается в том что в JavaScript по адресу "http://api-maps.yandex.ru/1.1/index.xml?key=AIK6a00BAAAAoWiiawIAH6lC5xN1crSgT1_KSuq-LRcMjZIAAAAAAAAAAADVdw3HWGobdWUvwTo43gYiA5_-ow==" содержатся ресурсы, которые не могут быть загружены на этапе обработки Callback запроса.

 

Вопрос:

Каким образом правильно производить инициализацию YandexMap из рутины Callback запроса? Статей на эту тему я не нашёл ...

Честно говоря я не до конца осознаю в чём проблема и кто виноват, т.к. пытаюсь подружить программные продукты 2 разных вендоров "yandex" и "devexpress". На данный момент "devexpress" утверждает что "yandex" не может инициализироваться из Callback заппроса ... Я не берусь что либо утверждать, т.к. API карт я не писал.

 

Заранее благодарен за конструктивные ответы.

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

 Ваш код работать не будет.

Причина банальна - если вы что-то подгружаете динамически - значит страница уже готова.

Это значит что $(document).ready уже наступил, и будет выполнен в тот же момент.

Что нужно сделать

Не загружать ymaps в таком виде как вы этого делаете сейчас( те честно ), а подгружать динамически в пределах когда где вы сейчас начинаете работать с картой( в общем смысле заменить document.ready на $.getScript где ваш код будет в колбеке загрузки скрипта)

 

ммм ... но у меня нормально отрабатывает $(document).ready ...

трабл случается в момент инициализации, т.к. YMaps не найден ...

Вот я и том.

document.ready думает что готов и начинает исполнять вашу функцию, а загрузка карт даже не начиналась.

Заменил код на: 

 

$.getScript('http://api-maps.yandex.ru/1.1/index.xml?key=AIK6a00BAAAAoWiiawIAH6lC5xN1crSgT1_KSuq-LRcMjZIAAAAAAAAAAADVdw3HWGobdWUvwTo43gYiA5_-ow==', function(data, textStatus) {
   map = new YMaps.Map($("#MapDiv")[0]);
   // Тут инициализация карты, всегда выдаётся ошибка:
   // Команда не поддерживается объектом

Непонятно почему так происходит ...