modules.define

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

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

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

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

{ 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
   );