В принципе, идея состоит в том, что модуль «sub» создает объект, и этот объект должен быть частью библиотеки утилит, которая является «основным» модулем. Тем не менее, «суб» объект зависит на коммунальные услуги от «основной»:Как решить круговую зависимость в Require.js?
// Main module
define(['sub'], function(sub) {
var utils = {
utilityMain: function() {
// ...
};
// ...
};
tools.subModule = sub;
return tools;
});
// Sub module
define(['main'], function(main) {
return new (function() {
// Singleton object using functions in main module
var somestuff = function() {
main.utilityMain();
// etc
};
})();
});
Как я могу добиться этого с require.js, не создавая черную дыру, которая поглотит всю планету?
спасибо.
«переосмыслите дизайн», я полностью согласен, но на данный момент это немного сложно. Я уже исследовал и изучил то, что вы предлагаете ... Я пытался обернуть голову вокруг объекта 'export' в течение последних двух дней, и теперь вы говорите мне, что он доступен * немедленно *? Я думал, что 'export' возвращается' define'/'require' только после возобновления выполнения заводской функции? На втором взгляде кажется, что вы предполагаете, что 'main' должен возобновить выполнение только один раз, когда' sub' возобновляет? – pilau
Я был бы очень признателен, если бы вы действительно могли изложить порядок, в котором все это происходит. Я думаю, что именно здесь я не понимаю, как это решение решает мою проблему. Благодаря! – pilau
Использование 'export' позволяет только каждому модулю иметь ссылку на какой-либо объект вместо' undefined' для каждого модуля. Вы не можете сразу использовать _functions_ любого из модулей, но можете быть уверены, что ссылки будут правильно настроены во время выполнения. Подумайте о параллельности обоих определений модулей. Они оба знают, где _look_ для другого модуля, но ни один из них не может взаимодействовать, пока они не будут завершены. – freejosh