Я действительно новичок в 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» с полным списком?
Если вы делаете это вторым способом, как вы можете вызывать эти функции из событий виджета?