Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объектно-ориентированный подход, Из 3-х глобальных переменных одну?? 
:(
    Опции темы
Alex_B
Дата 14.6.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

Репутация: нет
Всего: 1



Помогите пожалуйста уменьшить пространство глобальных имен.

Ситуация:
Есть кнопка, при нажатии на которую вызывается функция addPolylineToMap и  глобальному объекту map присоединяется событие:

Код

function addPolylineToMap(){
    GEvent.addListener(map, "click", function(marker, point) {
        polylineSinglObjectPointsArray.push(point);
        addLineToMap();
    });
}


Не суть важно как присваивается, важно другое – если нажать на эту же кнопку второй раз, то событие должно отменяться.
Для этого введен глобальный объект 

Код

var addLineEvent;//global1


И функция addPolylineToMap приобрела следующий вид:

Код

function addPolylineToMap(){
    if(!addLineEvent){
        addLineEvent = GEvent.addListener(map, "click", function(marker, point) {
            polylineSinglObjectPointsArray.push(point);
            addLineToMap();
        });
    }
    else{GEvent.removeListener(addLineEvent);}
}


Далее
Массив polylineSinglObjectPointsArray содержит необходимые данные (координаты точек), которые используются при нанесении линии на карту функцией addLineToMap().
В то же время этот же массив должен пополняться из обработчика события глобального объекта map.
(строка polylineSinglObjectPointsArray.push(point);)

Таким образом массив polylineSinglObjectPointsArray тоже глобальный:
Код

var polylineSinglObjectPointsArray=[];//global2



При нанесении линии на карту функцией addLineToMap()

Код

function addLineToMap(){
    map.removeOverlay(polylineSinglObject);
    polylineSinglObject = new GPolyline(polylineSinglObjectPointsArray, "#FF0000",10);
    map.addOverlay(polylineSinglObject);
}


Создается объект polylineSinglObject, но что бы линии не наслаивались одна на другую нужно перед добавлением новой точки в конец линии удалить все предыдущие точки и построить всю линию заново с новой точкой на конце.

Получается еще один глобальный объект
Код

var polylineSinglObject;//global3


Все вместе это выглядит вот так:
Код

var polylineSinglObject;//global3
var polylineSinglObjectPointsArray=[];//global2
var addLineEvent;//global1

function addLineToMap(){
    map.removeOverlay(polylineSinglObject);
    polylineSinglObject = new GPolyline(polylineSinglObjectPointsArray, "#FF0000",10);
    map.addOverlay(polylineSinglObject);
}

function addPolylineToMap(){
    if(!polylineSinglObject){
        addLineEvent = GEvent.addListener(map, "click", function(marker, point) {
            polylineSinglObjectPointsArray.push(point);
            addLineToMap();
        });
    }
    else{
        GEvent.removeListener(addLineEvent);
        polylineSinglObject = null;
        polylineSinglObjectPointsArray.length = 0;
    }
}


Вопрос:
Наверняка можно из этих 3-х глобальных переменных один глобальный объект.
Как это можно сделать?

Спасибо.
Ps сильно не ругайте, сам сообразить как сделать такой объект немогу.
PM MAIL   Вверх
AKS
Дата 14.6.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Alex_B, вот один пример, а следом за ним - две ссылки на материалы по альтернативным способам.
PM MAIL   Вверх
Alex_B
Дата 14.6.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

Репутация: нет
Всего: 1



AKS, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.