На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Найдена ошибка GWTK.MapProjectManagerControl

Поиск  Пользователи  Правила  Войти
Форум » Серверные приложения » GIS WebServer
Страницы: 1
RSS
Найдена ошибка GWTK.MapProjectManagerControl, openProject (GisWebServer 3.6)
 
Добрый вечер, при смене проекта пропадали внешнии функции слоя. Копаясь в коде исправил код на следующий и проблема решена:
/**
         * Открыть проект карты
         * @method projectStart
         * @param options {Object} параметры карты
         * @param id {String} идентификатор проекта
        */
       openProject: function (options, id) {
           if (!this.map || !options || !id) {
               return;
           }

           this._writeCookie(['proj='+id]);

           if (options.contenttree && typeof options.contenttree == 'string') {
               options.contenttree = JSON.parse(options.contenttree);
           }

           var i, len = options.layers.length;
           for (i = 0; i < len; i++) {
               var infotype = typeof options.layers[i].additionalInfo;
               if (infotype != 'undefined' && infotype == 'string') {
                   if (options.layers[i].additionalInfo.length > 0) {
                       var func = getFunc(options.layers[i].additionalInfo);
                       options.layers[i].additionalInfo = func;  
                   }
               }
           }
           function getFunc(a){
               var scope = window;
               var scopeSplit = a.split('.');
               for (var i = 0, l = scopeSplit.length - 1; i < l; i++){
                   scope = scope[scopeSplit[i]];
               }
               return scope[scopeSplit[scopeSplit.length - 1]];
           }
           var parent = this.map.divID;

           this.map._clearCookie();

           this.map.destroy(true);

           this.map = new GWTK.Map(parent, options);

           if ($.isFunction(this.handler_openProject)) {
               this.handler_openProject(this.map);
           }
           
           var tool = this;

           setTimeout(function () { w2utils.unlock(tool.parent); }, 300);

           return;
       }
Изменено: Валерий Стасюк - 16.01.2018 02:44:09
 
Добрый день, Валерий!

Вы в Вашем приложении можете использовать предложенный вариант - getFunc.
Но это не универсально. При записи типа namespace1.namespase2.func работать не будет.
Надежней, чтобы функция  additionalInfo была определена в window,
например   showAdditionalInfo = function(parm){
     if (window.gi){
          gi.additionalInfo(parm);
     }
}
 
var scope - ссылка на window  в функции geFunc. Мною протестировано на универсальность и функции типа func.a.b.c работают. В вашем коде было window[func.a]  и возращало undefined, а должно быть window[func][a]  
Изменено: Валерий Стасюк - 16.01.2018 12:06:18
 
Да, действительно. Я не увидела строку scope = window;  !
В нашем коде, как указано в документации - функция, расположенная в window.
Но ваш вариант хороший.    
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности