AMD: что означает «зависимости», когда это объект, а не массив?

Я унаследовал некоторый код с модулем AMD, который выглядит так:

define('shared/modulename', {
    load: function(name, parentRequire, callback, config) {...}
})

Это не похоже на обычный синтаксис AMD для массива зависимостей, как описано здесь . Код не комментируется, и нет объяснения, почему для этого модуля необходимо изменение синтаксиса.

Что на самом деле делает этот вызов define()?

Глядя на аргументы, переданные функции load(), они кажутся внутренними особенностями AMD.


person mikemaccana    schedule 18.01.2013    source источник


Ответы (1)


Это одна из простых форм определения модулей AMD. http://requirejs.org/docs/api.html#define

В RequireJS вы можете определить пары имя-значение в этом простом формате:

define({foo: 'yay'})

И вы также можете указать имя модуля в определении, что вам необходимо, когда вы объединяете свои модули. Таким образом, наш пример:

define('aloha', {foo: 'yay'})

Теперь вернемся к вашему коду. Смысл поверхностный. Он определяет модуль с именем shared/modulename. exports этого модуля является объектом, который содержит метод с именем load.

Вы можете использовать этот модуль следующим образом:

require('shared/modulename').load(name, parentRequire, callback, config)
person nil    schedule 18.01.2013
comment
Спасибо @nil. Я видел синтаксис «экспортировать только объект», но я все еще в замешательстве - я знаю, что «load()» запущен (если я добавлю операторы ведения журнала), я не вижу нигде в своем собственном коде, который фактически запускает загрузку (), и все значения этих аргументов являются внутренними компонентами requirejs. Это заставляет меня думать, что «загрузка» может быть какой-то внутренней потребностью. Есть идеи? - person mikemaccana; 18.01.2013
comment
Это будет странно... Можете ли вы сделать подробный пример на jsfiddle или что-то в этом роде. - person nil; 18.01.2013