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

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

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

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

Но с 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".
Но в этой функции я должен:
- сделать еще один запрос для каждого модуля додзё снова
- Я НЕ МОГУ использовать ни одну из функций, которые находятся "внутри" функции "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» с полным списком?
Если вы делаете это вторым способом, как вы можете вызывать эти функции из событий виджета?

13
задан Hynek 8 March 2012 в 23:39
поделиться