У меня чертовски много времени, когда я перехожу на Dojo и новую структуру AMD, и я очень надеюсь, что кто-то сможет пролить свет на всю концепцию. Последние несколько недель я живу в Google, пытаясь найти информацию не об использовании, а о структуре и тенденциях в шаблонах дизайна.
Мне кажется странным, что для относительно сложного приложения javascript, например для главной страницы, где нужно создать и стилизовать Dijits, создать элементы DOM и т. Д., Мне нужно потребовать и, следовательно, использовать ТОННУ различных модули, которые в противном случае были доступны в пространстве имен dojo до системы AMD (или, по крайней мере, не были назначены 23 различным переменным).
Пример:
require(['dijit/form/ValidationTextBox', 'dijit/form/SimpleTextarea', 'dijit/form/CheckBox', 'dijit/Dialog', 'dijit/form/Form'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'],
function(ready, parser, style, registry, dom, event, construct){
//...etc
}
Это всего лишь несколько модулей для одной из страниц, над которыми я работаю. Несомненно, есть лучший способ доступа к этим методам и т. Д., Не требующий выхода в будущих выпусках. Я имею в виду, действительно ли мне нужно импортировать совершенно новый модуль для использования byId ()
? И еще один для связи событий? Вдобавок ко всему, весь беспорядок, создаваемый из-за необходимости назначать имя переменной в списке аргументов функций, за которое нужно цепляться, кажется таким шагом назад.
Я подумал, может быть, вы require ()
модуль только тогда, когда это необходимо, например, модуль query
, но если он мне понадобится более одного раза, то скорее всего, это переменная, в которой он назначено вне области видимости, и мне нужно поместить его в domReady!
или готовы звонить
. действительно .... ??!
Вот почему я могу только предположить, что это мое непонимание додзё.
Я действительно смотрел, искал и покупал книги (хотя и до AMD), но эта библиотека действительно дает мне возможность потратить свои деньги. Я ценю свет, который можно пролить на это.
Редактировать пример
require(['dijit/form/ValidationTextBox'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'], function(ready, parser, style, registry, dom, event, construct){
/* perform some tasks */
var _name = new dijit.form.ValidationTextBox({
propercase : true,
tooltipPosition : ['above', 'after']
}, 'name')
/*
Let's say I want to use the query module in some places, i.e. here.
*/
require(['dojo/query', 'dojo/dom-attr'], function(query, attr){
query('#list li').forEach(function(li){
// do something with these
})
})
}
Исходя из этого формата, который используется во многих примерах как из набора инструментов додзё, так и со сторонних сайтов, было бы, ИМХО, абсолютно нелепо загружать все необходимые модули в качестве первая функция (готовность, синтаксический анализатор, стиль, регистрация ...
становилась все длиннее и длиннее, создавала проблемы с конфликтами имен и т. д.
Запуск и require ()
ing все модули, которые мне понадобятся в течение жизни сценария, кажутся мне глупыми. При этом мне пришлось бы взглянуть на некоторые сценарии "диспетчера пакетов". Но для этого примера, если бы я хотел использовать запрос модуль в избранных местах, мне пришлось бы либо загрузить его вместе с остальным в основном операторе require ()
. Я понимаю, почему до некоторой степени, но что такого плохого в общих пространствах имен с точечным синтаксисом? dojo. что угодно?Найди это()? Зачем загружать модуль, ссылаться на уникальное имя, проходить через закрытие, бла-бла?
Хотелось бы, чтобы это был более простой вопрос, но я надеюсь, что это имеет смысл.
Раздражение
Назовите меня новичком, но это действительно .. правда .. сводит меня с ума. Я не новичок, когда дело доходит до Javascript (по-видимому, нет), но ничего себе. Я не могу понять это !
Вот что я собираю. В adder.js:
define('adder', function(require, exports){
exports.addTen = function(x){
return x + 10
}
})
На какой-то главной странице или где-то еще:
require(['./js/cg/adder.js'])
... который не соответствует аккуратному формату require (['cg / adder'])
, но как бы то ни было. Сейчас не важно.
Тогда использование сумматора
должно быть таким:
console.log(adder.addTen(100)) // 110
Ближайшее, что я получил, было console.log (сумматор)
, возвращающее 3
. Ага. 3
. В противном случае это сумматор не определен
.
Почему это должно быть так сложно? Я использую свою карту новичка в этом, потому что я действительно понятия не имею, почему это не сочетается.
Спасибо, ребята.