modules.define
Статическая функция.
Определение модуля в модульной системе.
Примечание
Рекомендуется создавать собственные модули в своем пространстве имен, чтобы случано не заменить необходимые для работы API модули.
Возвращает ссылку на себя.
{ modules } modules.define(module[, depends, resolveCallback[, context]])
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: String Название модуля. |
|
— |
Тип: String[] Массив названий необходимых модулей. Этот аргумент может быть пропущен. |
|
— |
Тип: Function Функция, которая определяет модуль. Первым аргументом в resolveCallback поступит provide-функция, в которую нужно будет передать модуль. Вызов provide-функции может быть отложен во времени. Последующие аргументы - это модули, указанные в зависимостях. Порядок модулей будет соответствовать порядку в массиве depends. В случае если модуль не может быть зарезолвен, то необходимо об этом уведомить модульную систему. Это можно сделать передав в provide-функцию второй аргумент. Второй аргумент будет передан в errorCallback и в promise как ошибка в запрос модуля. Впоследствии модуль можно будет запросить повторно. |
|
— |
Тип: 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
);
Обязательный параметр.