2015-07-17 1 views
1

У меня проблема с модулем загрузки с использованием requireJS. У меня есть два файла:Модуль RequireJS не загружает зависимости

FILE1: App1/JS/Utils/Общин/commons.js

define("utils/commons/commons", 
    [ 
     "../../../../app2/MenuModule" 
    ], function (MenuModule) { 
//MenuModule is undefined here 
var app = angular.module('commons', ['MenuModule']); 

}); 

file2: app2/MenuModule.js

define("../../../../app2/MenuModule", 
    [ 
     "../../../../app2/MenuController", 
     "../../../../app2/MenuRestProvider" 

    ], function (MenuController, 
    MenuRestProvider) { 

var app = angular.module('MenuModule', []); 

app.factory('MenuRestProvider', MenuRestProvider); 
app.controller('MenuController', MenuController); 

return app; 

}); 

Дело: File1 загружается File2 и функция «define» из File2. Зависимости от File2 не выбраны, а функция, переданная функции «define», не оценивается. Вы видите, что вызывает эту проблему?

+0

Обновите вопрос с помощью ошибок с консоли. И я вижу несколько странных вещей: (1) Использование именованных модулей (2)) Использование '../' в имени модуля (это, скорее всего, преступник, я уверен) (3) Длинные цепочки '../' (действительно хрупкие) и (4) Подозрительные пути зависимостей в файле2 (shouldn ' t '" ../../../../ app2/MenuController "' просто быть './app2/MenuController" или даже '" app2/MenuController "??) –

+0

Самое странное, что я не знаю, t получить какие-либо ошибки в консоли из requireJS. Согласно пункту 4, насколько я знаю, все пути должны быть относительно baseUrl, определенные в require.config. – ozgus

ответ

1

Я думаю, что вы вводите в заблуждение пути с идентификаторами модулей. Легко путать одно с другим, поскольку пути в конечном итоге приводят к определению модуляID в зависимости от того, как он был изменен, но когда вы помещаете относительные символы в ссылку на модуль, не думайте о «движении по пути», а скорее о том, чтобы двигаться вверх по иерархии модулей.

Все это означает, что вам нужно поделиться с нами конфигурациями путей, чтобы мы могли видеть, как ссылочные идентификаторы модулей могут быть переведены в пути для загрузки.

Также согласитесь: помещение модуляID непосредственно в вызов define() имеет запах кода. Вы должны разрешить загрузчику amd определить идентификаторы модуля для вас (сделав их анонимными модулями.

+0

Конфигурация действительно проста. Я установил 'baseUrl' в './js' в контексте «app1». – ozgus

+0

Что это значит? что просто m что базовый url - это каталог js относительно загруженной страницы html. Не имеет ничего общего с именами модулей. –

+0

Удаление имен модулей из функции определения действительно помогло! Спасибо! – ozgus