Служебный функционал, необходимый для работы API карт и разработки собственных модулей.
DG.Class предоставляет возможность использовать ООП подход в разработке функционала API карт, используется для реализации большинства классов, приведенных в этой документации.
Кроме реализации простой классической модели наследования имеются несколько свойств для удобной организации кода, такие как options, includes и statics.
var MyClass = DG.Class.extend({
initialize: function (greeter) {
this.greeter = greeter;
// конструктор класса
},
greet: function (name) {
alert(this.greeter + ', ' + name)
}
});
// создает объект класса MyClass и передает "Hello" в конструктор
var a = new MyClass("Hello");
// вызывает метод greet, который показывает всплывающее окно с текстом "Hello, World"
a.greet("World");
Для определения новых классов используется конструкция DG.Class.extend, также метод extend можно использовать в любом классе, который наследуется от DG.Class:
var MyChildClass = MyClass.extend({
// ... новые свойства и методы
});
Данный код создаст класс, который наследует все методы и свойства родительского класса (через цепочку прототипов), также возможно добавление или переопределение родительских методов и свойств. Кроме того, корректно обрабатывается оператор instanceof:
var a = new MyChildClass();
a instanceof MyChildClass; // true
a instanceof MyClass; // true
Вы можете вызывать родительские методы (включая конструктор) из потомков (так, как вы бы делали это с помощью вызова super в других языках программирования) с помощью JavaScript функций call или apply:
var MyChildClass = MyClass.extend({
initialize: function () {
MyClass.prototype.initialize.call("Yo");
},
greet: function (name) {
MyClass.prototype.greet.call(this, 'bro ' + name + '!');
}
});
var a = new MyChildClass();
a.greet('Jason'); // выведет "Yo, bro Jason!"
options — это специальное свойство, которое в отличии от других объектов передаваемых через extend будет слито с аналогичным свойством родителя, вместо полного переопределения, это позволяет управлять конфигурацией объектов и значениями по умолчанию:
var MyClass = DG.Class.extend({
options: {
myOption1: 'foo',
myOption2: 'bar'
}
});
var MyChildClass = DG.Class.extend({
options: {
myOption1: 'baz',
myOption3: 5
}
});
var a = new MyChildClass();
a.options.myOption1; // 'baz'
a.options.myOption2; // 'bar'
a.options.myOption3; // 5
Также имеется метод DG.Util.setOptions, который позволяет сливать опции переданные в конструктор с изначально заданными опциями:
var MyClass = DG.Class.extend({
options: {
foo: 'bar',
bla: 5
},
initialize: function (options) {
DG.Util.setOptions(this, options);
...
}
});
var a = new MyClass({bla: 10});
a.options; // {foo: 'bar', bla: 10}
includes — это специальное свойство, которое подмешивает объекты в класс (такие объекты называются mixin-ами).
var MyMixin = {
foo: function () { ... },
bar: 5
};
var MyClass = DG.Class.extend({
includes: MyMixin
});
var a = new MyClass();
a.foo();
Также вы можете подмешивать объекты в процессе выполнения программы с помощью метода include:
MyClass.include(MyMixin);
statics — это свойство, в котором описываются статические элементы класса, удобно использовать для определения констант:
var MyClass = DG.Class.extend({
statics: {
FOO: 'bar',
BLA: 5
}
});
MyClass.FOO; // 'bar'
Для создания новых объектов классов используются фабричные методы, которые имеют такое же название, как и у класса, но начинаются с нижнего регистра. Это аналог ключевого слова new, то есть, данные строки кода эквивалентны:
new DG.Map('map');
DG.map('map');
Реализовать фабричный метод в собственных классах довольно просто, например:
DG.map = function (id, options) {
return new DG.Map(id, options);
};
Если вы разрабатываете модуль к API, тогда велика вероятность того, что вам понадобится выполнить дополнительные действия при инициализации объектов существующих классов (например, при инициализации объекта DG.Polyline). Для подобного рода задач имеется метод addInitHook:
MyClass.addInitHook(function () {
// ... выполнить дополнительные действия при вызове конструктора
// например, добавить обработчики событий, установить значения свойств и т.п.
});
Также можно использовать сокращенную запись, если необходимо вызвать лишь один метод при инициализации:
MyClass.addInitHook('methodName', arg1, arg2, …);
Объект со свойствами, необходимыми для определения браузера/фичи, например:
if (DG.Browser.ie6) {
alert('Вам срочно нужно обновить свой браузер!');
}
| Свойство | Тип | Описание |
|---|---|---|
ie |
Boolean |
true для всех версий Internet Explorer. |
ie6 |
Boolean |
true для Internet Explorer 6. |
ie7 |
Boolean |
true для Internet Explorer 7. |
webkit |
Boolean |
true для браузеров на основе WebKit, таких как Chrome и Safari (включая мобильные версии). |
webkit3d |
Boolean |
true для браузеров на основе WebKit, поддерживающих CSS 3D трансформации. |
android |
Boolean |
true для мобильных браузеров Android устройств. |
android23 |
Boolean |
true для мобильных браузеров на старых версиях Android устройств (2 и 3). |
mobile |
Boolean |
true для браузеров, работающих на современных мобильных устройствах (включая iOS Safari и различные Android устройства). |
mobileWebkit |
Boolean |
true для мобильных браузеров на основе WebKit. |
mobileOpera |
Boolean |
true для мобильной версии Opera. |
touch |
Boolean |
true для всех браузеров, работающих на тач-устройствах. |
msTouch |
Boolean |
true для браузеров с тач-моделью от Microsoft (например, IE10). |
retina |
Boolean |
true для устройств с Retina экранами. |
Общие служебные методы и свойства.
| Метод | Возвращает | Описание |
|---|---|---|
extend(
|
Object |
Сливает свойства объекта src (или нескольких объектов) в свойства объекта dest и возвращает последний. Также имеется псевдоним DG.extend. |
bind(
|
Function |
Возвращает функцию, которая выполняет функцию fn с определенным объектом контекста obj (так, чтобы ключевое слово this внутри функции указывало на obj). Также имеется псевдоним DG.bind. |
stamp(
|
String |
Применяет уникальный ключ к объекту и возвращает его значение. Полезно для получения быстрого доступа к объекту, находящемуся в группе. |
throttle(
|
Function |
Возвращает обертку над функцией fn, которая гарантирует, что функция не будет вызвана чаще, чем раз в указанный интервал времени time (например, используется при запросах к тайлам во время перетаскивания карты), опционально можно передать контекст (context), в котором будет вызываться функция. |
formatNum(
|
Number |
Возвращает число num округленное до digits знаков. |
splitWords(
|
String[] |
Обрезает и разделяет строку на части, используя в качестве разделителя пробел, возвращает массив с этими частями. |
setOptions(
|
Object |
Сливает переданные опции со свойством options объекта obj, возвращает результирующий объект. См. опции класса. Также имеется псевдоним DG.setOptions. |
getParamString(
|
String |
Преобразует объект в URL-строку, например, {a: "foo", b: "bar"}'?a=foo&b=bar'. |
template(
|
String |
Простая функция-шаблонизатор, создает строку применяя значения из объекта data в формате {a: 'foo', b: 'bar', …} к строке шаблона в формате 'Hello {a}, {b}' — в этом примере будет возвращена строка 'Hello foo, bar'. |
isArray(
|
Boolean |
Возвращает true, если переданный объект является массивом. |
trim(
|
String |
Обрезает пробелы с обеих сторон строки и возвращает результат. |
| Свойство | Тип | Описание |
|---|---|---|
emptyImageUrl |
String |
URI, содержащий пустое GIF изображение, закодированное в base64. Используется для освобождения памяти неиспользуемых картинок в мобильных WebKit браузерах (память освобождается установкой свойства src в данное значение). |
Функционал, с помощью которого осуществляется перевод пользовательского интерфейса.
Подмешивает в карту два метода: setLang и getLang. Также имеется объект DG.Locale, который можно подмешать в любой внешний модуль, после чего в нем появится метод t, с помощью которого можно осуществить перевод. Классы модулей, к которым примешивается DG.Locale должны содержать внутри себя свойство _map и статическое свойство Dictionary.
Базовым для всех словарей является словарь DG.Dictionary, в котором хранятся правила перевода слов во множественные формы (plural rules). При создании модуля, использующего свои словари, необходимо их разместить в папке lang. К примеру, если вы будете использовать итальянский и русский языки, тогда необходимо создать файлы lang/it.js и lang/ru.js. Примеры создания словарей рассмотрены ниже.
Подмешивание (mixin) функционала локализации в модуль:
DG.LocaleExample = DG.Control.extend({
includes: DG.Locale,
statics: {
Dictionary: {}
}
...
}
Подписка на событие langchange:
this._map.on('langchange', this._updateText, this);
Перевод строки на текущий язык карты:
container.innerHTML = this.t("{n} people", 16700000) + ' ' + this.t("regularly use 2GIS");
Создание собственных словарей на итальянском и русском языках:
Cодержимое файла lang/it.js:
DG.LocaleExample.Dictionary.it = DG.extend({
"{n} people" : ["{n} utente", "{n} utenti"],
"regularly use 2GIS" : "utilizzano regolarmente 2GIS"
}, DG.Dictionary.it);
Cодержимое файла lang/ru.js:
DG.LocaleExample.Dictionary.ru = DG.extend({
"{n} people" : ["{n} пользователь", "{n} пользователя", "{n} пользователей"],
"regularly use 2GIS" : "регулярно используют 2GIS"
}, DG.Dictionary.ru);
Набор методов для обработки ломаных.
| Метод | Возвращает | Описание |
|---|---|---|
simplify(
|
Point[] |
Уменьшает количество точек в ломаной и возвращает новую упрощенную ломаную. Позволяет увеличить производительность обработки/отображения ломаных на карте. Параметр tolerance влияет на величину упрощения (чем меньше значение, тем лучше качество геометрии и ниже производительность). |
pointToSegmentDistance(
|
Number |
Возвращает расстояние между точкой p и сегментом между точками p1 и p2.
|
closestPointOnSegment(
|
Point |
Возвращает ближайшую точку на сегменте p1 p2 до точки p. |
clipSegment(
|
- |
Обрезает сегмент a b по прямоугольной области (модифицируются непосредственно точки сегмента). |
Набор методов для обработки точек многоугольников.
| Метод | Возвращает | Описание |
|---|---|---|
clipPolygon(
|
Point[] |
Обрезает многоугольник по прямоугольной области. |