У меня проблема с RequireJS. По сути, я не могу получить доступ к функции, определенной внутри другого файла, из другого.
Мне нужно сделать это, потому что я хочу экспортировать данный поднабор функций, например
define('submodule', [], function() {
let myFunction1 = function(){ return "Hello"; }
let myFunction2 = function(){ return " From"; }
let myFunction3 = function(){ return " Submodule!"; }
return {
myFunction1 : myFunction1,
myFunction2 : myFunction2,
myFunction3 : myFunction3,
};
});
И доступ к ним из другого файла
define('main', ['config', 'sub1', 'sub2', 'submodule'],
function(config, sub1, sub2, submodule) {
//Config
alert(config.conf);
//Submodule
let callSubmodule = function() {
alert(submodule.myFunction1() +
submodule.myFunction2() +
submodule.myFunction3());
}
//sub1
let callSub1 = function() {
alert(sub1.myFunction1());
}
//sub2
let callSub2 = function() {
alert(sub2.myFunction1());
}
});
Дело в том, что обычно я могу сделать это с помощью sub1 и sub2, но с подмодулем я просто не могу. Я думаю, что это почему-то вызвано зависимостями в require.config.js.
Мой require.config.js:
require(['common'], function () { //contains vendors
require(['config'], function () { //contains a js config file
require(['main'], function () { //main file
require(['sub1', 'sub2'], function () { //some subfiles
require(['submodule']);
});
});
});
});
Для submodule.myFunction1() и двух связанных функций, которые я получаю:
Неподготовлено (в обещании) TypeError: Невозможно прочитать свойство myFunction1 из undefined
Это странно, так как я могу это сделать в других ситуациях, и я действительно не могу понять, почему это происходит. Например, я могу вызвать функции sub1 и sub2 из основного и других файлов, но не в подмодуль в частности.
Index.html
//Taken from Plunker
. . .
<script data-main="common" data-require="[email protected]" data-semver="2.1.20" src="http://requirejs.org/docs/release/2.1.20/minified/require.js"></script>
<script src="require.config.js"></script>
. . .
<button onclick = "callSubmodule()">Call Submodule</button>
<button onclick = "callSub1()">Call Sub1</button>
<button onclick = "callSub2()">Call Sub2</button>
common.js содержит поставщиков, вот только пример
requirejs.config({
baseUrl : "",
paths : {
"jquery" : "http://code.jquery.com/jquery-latest.min.js"
}
});
sub1.js
define('sub1', ['submodule'], function(submodule) {
let myFunction1 = function(){ return "called sub1"; }
return {
myFunction1 : myFunction1
};
});
sub2.js
define('sub2', ['submodule'], function(submodule) {
let myFunction1 = function(){ return "called sub2"; }
return {
myFunction1 : myFunction1
};
});
Я установил Plunker с помощью @SergGr help, который пытается реплицировать структуру приложения, но все модули получают undefined при щелчке. На реальном приложении этого не происходит.
Как я могу это решить?