Dojo AMD: невозможно вызвать функцию внутри запроса

Я действительно новичок в dojo, но когда я начал разрабатывать новое приложение с версией dojo 1.7.2, я также хотел использовать новый синтаксис AMD для функций. К сожалению, я не понимаю этого. :-(

Больше всего меня раздражает то, что я не могу просто вызвать любую функцию, которая находится внутри блока «require». Например, у меня есть страница, которая при открытии создает динамическую таблицу с несколькими виджетами в каждой строке. Тогда у меня есть кнопка, которая добавляет одну пустую строку при каждом нажатии.

Без синтаксиса AMD было бы легко:
- поместите все мои "dojo.require ()" в ГОЛОВУ
- а затем создать кучу моих собственных функций для создания таблицы и виджетов
- функция добавления строки может легко получить доступ к любым глобальным переменным, которые заполнила моя предыдущая

Но с AMD это так:

Исходная функция создает таблицу и виджеты:

function fillReportTable(repId) {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
     function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
   // a lot of code to create the table, consisting of SEVERAL functions 
   function createNewRow(tbl) { ...} 
   function function1 () {... } 
   function function2 () {... } 
   function function3 () {... } 
}

Теперь кнопка «Добавить пустую строку» вызывает собственную функцию «addEmptyRow».
Но в этой функции мне нужно:
- снова выполнить другое требование для каждого модуля dojo
- Я не могу использовать ни одну из функций, которые находятся «внутри» функции «fillReportTable». Например, функция «createNewRow»

 function addEmptyRow() {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
     function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
}

Все это кажется очень сложным с AMD.
Или я что-то упускаю здесь очевидное?
С AMD, если вы разделяете свой код на множество мелких функций, выполняете ли вы «требование» внутри КАЖДОЙ функции снова и снова? Или вы помещаете все функции в один "require" с полным списком?
Если вы делаете это вторым способом, как вы можете вызывать эти функции из событий виджета?

Ответы на вопрос(3)

Ваш ответ на вопрос