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('Обишка при загрузке'));
        });
});

// Запрос модулей с обработкой ошибок.
ymaps.modules.require(['plugin.CustomModule'])
    .spread(
        function (CustomModule) {
            // ... 
        },
        function (error) {
            console.log(error.messsage); // "Error when loading".
            // Код обработки ошибки получения модуля. Модуль можно запросить повторно.
        },
        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
   );
Предыдущая
Следующая