modules.define

Статическая функция.

Определение модуля в модульной системе.

Примечание. Рекомендуется создавать собственные модули в своем пространстве имен, чтобы случано не заменить необходимые для работы API модули.

Возвращает ссылку на себя.

{ modules } modules.define(module[, depends, resolveCallback[, context]])

Параметры:

Параметр Значение по умолчанию Описание
module *

Тип: String

Название модуля.

depends

Тип: String[]

Массив названий необходимых модулей. Этот аргумент может быть пропущен.

resolveCallback *

Тип: Function

Функция, которая определяет модуль. Первым аргументом в resolveCallback поступит provide-функция, в которую нужно будет передать модуль. Вызов provide-функции может быть отложен во времени. Последующие аргументы - это модули, указанные в зависимостях. Порядок модулей будет соответствовать порядку в массиве depends. В случае если модуль не может быть зарезолвен, то необходимо об этом уведомить модульную систему. Это можно сделать передав в provide-функцию второй аргумент. Второй аргумент будет передан в errorCallback и в promise как ошибка в запрос модуля. Впоследствии модуль можно будет запросить повторно.

context

Тип: Object

Контекст исполнения функции.

* Обязательный параметр/опция.

Примеры:

1.

// Задание собственного модуля.
// 'plugin.*' – это собственное пространство имен.
ymaps.modules.define('CustomModule', function (provide) {
    var CustomModule = function (defValue) {
        this.field = defValue;
    };
    provide(CustomModule);
});
// Запрос модулей.
ymaps.modules.require(['CustomModule'])
    .spread(function (CustomModule) {
        // ...
    }, this);

2.

// Задание собственного асинхронного модуля.
ymaps.modules.define('CustomAsyncModule', function (provide) {
    // Для работы модуля необходимо загрузить внешний скрипт.
    $.getScript("ajax/test.js")
        .done(function (script, textStatus) {
            function CustomAsyncModule () {
                // ...
            }
            // Вызов provide-функции после загрузки скрипта.
            provide(CustomAsyncModule);
        });
});
// Запрос модулей.
ymaps.modules.require(['CustomAsyncModule'])
    .spread(function (CustomAsyncModule) {
        // ...
    }, this);

3.

// Реализуем собственный асинхронный модуль с учетом ошибки.
ymaps.modules.define('plugin.CustomModule', function (provide) {
    $.getScript("ajax/test.js")
        .done(function (script, textStatus) {
            // Обработка удачной загрузки скрипта.
            provide({
                a: 1
            });
        })
        .fail(function (jqxhr, settings, exception) {
            // Уведомляем модульную систему о том, что модуль           
            // не может быть подготовлен сейчас.
            provide(null, new Error('Error when loading'));
        });
});
// Запрос модулей c обработкой ошибки.
ymaps.modules.require(['plugin.CustomModule'])
    .spread(function (CustomModule) {
        // ...
    }, function (error) {
        console.log(error.messsage);
        // "Произошла ошибка при загрузке".
        // Код обработки ошибки получения модуля.
        // Модуль можно запросить повторно.
    }, this);

4.

// Задание собственного модуля с зависимостями.
ymaps.modules.define('CustomLayoutModule', [
     'templateLayoutFactory',
     'layout.storage'
], function (provide, templateLayoutFactory, layoutStorage) {
    var customLayoutClass = templateLayoutFactory.createClass(
        '<div>My Layout</div>', {
            build: function () {
                customLayoutClass.superclass.build.call(this);
                // ...
            },
            clear: function () {
                // ...
                customLayoutClass.superclass.clear.call(this);
            }
        }
    );
    layoutStorage.add('customLayout', customLayoutClass);
    provide(customLayoutClass);
});
// Запрос своего макета.
ymaps.modules.require(['CustomLayoutModule'])
    .spread(
        function (CustomLayoutModule) {
            // ...
        },
        this
    );