Я действительно новичок в dojo, но когда я начал разрабатывать новое приложение с dojo версией 1.7.2, я также хотел использовать новый синтаксис AMD для функций. К сожалению, я, похоже, не понимаю.:-(
Что меня больше всего раздражает, так это то, что я не могу просто вызвать любую функцию, которая находится внутри "require" -block. Например, у меня есть страница, которая при открытии создает динамическую таблицу с несколькими виджетами в каждой строке. Затем у меня есть кнопка, которая каждый раз добавляет одну пустую строку.
Без синтаксиса 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".
Но в этой функции я должен:
- сделать еще один запрос для каждого 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, если вы отделите свой код на множество небольших функций, вы снова и снова выполняете функцию "требовать" внутри EACH? Или вы ставите все функции внутри одного "запроса" с полным списком?
Если вы сделаете это вторым способом, как вы можете вызывать эти функции из событий виджетов?