Dojo require () и AMD (1.7)

У меня чертовски много времени, когда я перехожу на 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 . В противном случае это сумматор не определен .

Почему это должно быть так сложно? Я использую свою карту новичка в этом, потому что я действительно понятия не имею, почему это не сочетается.

Спасибо, ребята.

32
задан Phix 8 February 2012 в 06:05
поделиться