У меня есть время heckuva, переход на Dojo и новую структуру AMD, и я действительно надеюсь, что кто-то может пролить свет на всю концепцию. В течение последних нескольких недель я живу в Google, пытаясь найти информацию об использовании, но тенденции структуры и дизайна в использовании этого.Dojo require() и AMD (1.7)
Мне кажется странным, что для относительно сложного приложения javascript, например, для главной страницы, где необходимо создать и стилизовать Dijits, создать элементы DOM и т. Д., Которые мне потребуются, и, следовательно, использовать TON различные модули, которые в противном случае были доступны в пространстве имен додзё до системы 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!
или ready
. reaalllly .... ??!
Вот почему я могу только предположить, что это мое отсутствие понимания для додзё.
Я действительно просмотрел и обыскал и купил книги (хотя и до 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
})
})
}
Основа этого формата, который используется со многими примерами как из додзё инструментария людей, а также сайтов третьих сторон, это было бы, ИМХО, абсолютно нелепо загрузите все необходимые модули, так как первые function(ready, parser, style, registy...
получат больше и больше времени и создадут проблемы с коллизиями именования и т. д.
Увольнение и require()
Для всех модулей, которые мне понадобятся во время работы сценария, мне просто кажется глупым , При этом мне придется посмотреть на некоторые сценарии «диспетчера пакетов». Но для этого примера, если бы я хотел использовать модуль запроса в выбранных местах, мне пришлось бы либо загрузить его с остальным в основной оператор require()
. Я понимаю, почему в какой-то степени, но что плохого в общих пространственных пространствах имен синтаксиса? dojo.whatever? dijit.findIt()? Зачем загружать модуль, ссылку в уникальное имя, проходить через закрытие, бла-бла?
Желаю, чтобы это был более простой вопрос, но я надеюсь, что это имеет смысл.
Раздражение
Позвоните мне NEWB, но это на самом деле .. действительно .. сводит меня с ума. Я не noob, когда дело доходит до Javascript (видимо, нет), но ничего себе. Я не могу понять это !
Вот что я собираю. В adder.js:
define('adder', function(require, exports){
exports.addTen = function(x){
return x + 10
}
})
В некоторых мастер-страницы или что-то:
require(['./js/cg/adder.js'])
... который не соответствует аккуратный формат require(['cg/adder'])
, но независимо. Не важно сейчас.
Затем, использование adder
должно быть:
console.log(adder.addTen(100)) // 110
Ближайший я был console.log(adder)
возвращение 3
. Ага. 3
. В противном случае это adder is not defined
.
Почему это должно быть так сложно? Я использую свою карту noob, потому что я действительно не понимаю, почему это не происходит вместе.
Спасибо, ребята.
Вы должны задать новый вопрос для своего последующего наблюдения. У вас недостаточно кода, чтобы показать нам проблему (например, вы даже не определяете «сумматор»). – Domenic
, основанный на вашем примере выше, вам понадобятся только две зависимости модуля: dijit/form/ValidationTextBox и dojo/query в одном требовании. Транзитные зависимости заботятся о вас. Как @Domenic говорит, может быть, здесь больше, и мы должны начать все сначала. – peller
Я не? Хм, да, я только начну. Спасибо, парни. Cheers – Phix