2015-03-20 5 views
1

У меня есть модуль, который имеет 2 зависимых модуля. В родительском модуле есть метод, который я бы хотел вызвать из обоих дочерних модулей. Как я мог это сделать?Как вызвать метод родительского модуля из дочернего модуля в requirejs?

Есть ли другой способ передачи объекта родительского модуля в конструктор дочернего модуля?

define(['child1', 'child2'], function (child1, child2) { 
    return { 
    init: function() { 
     child1.init(); 
     child2.init(); 
    }, 
    parentMethod: function() { 
     console.log('called'); 
    } 
    } 
}); 

/*child1*/ 
define(function() { 
    return { 
    init: function() { 
     //call parentMethod() 
    } 
    } 
}); 

/*child2*/ 
define(function() { 
    return { 
    init: function() { 
     //call parentMethod() 
    } 
    } 
}); 

ответ

3

RequireJS не имеет понятия отношений между родителями и дочерними элементами между модулями. Учитывая, что модули являются одноточечными и что модуль, такой как child1, может быть загружен несколькими модулями (например, загружен parent1 и parent2), то какой модуль должен требовать, чтобы JJS был действительным родителем child1?

Передача ссылки на родителя к функции вашего ребенка init() - это действительно путь.

+0

Я сделал это (передайте объект в init для детей), но я искал другой способ сделать это. Может быть, другая архитектура? Лучшая практика? – robert

+1

Лучшей практикой может быть то, чтобы дети излучали событие (используя jQuery или библиотеку событий) и имели родительский дескриптор события. В идеале, дети не должны знать родителя, поэтому должно быть задание родителя знать, как обрабатывать событие (ы), которое излучается. –

+1

@ kevin.groat Я использую событие в некоторых случаях и ссылки на другие модули/классы/экземпляры в других случаях. Это зависит от деталей проблемы, которую нужно решить. У меня есть библиотеки, где использование излучателей событий будет означать чрезмерную разработку. У меня есть библиотеки, где * not * использование излучателей событий приведет к слишком тесной связи. – Louis

Смежные вопросы