Dojo


Абстракция данных
ItemFileReadStore
ItemFileWriteStore
Анализ ItemFileReadStore
Запрос дочерних элементов
Иерархии и ссылки в формате JSON
Извлечение элемента по идентификатору
Извлечение элемента по произвольному критерию
Изменение существующего элемента
Изменение схемы работы с данными
Интерфейс Identity
Интерфейс Notification
Интерфейс Read
Интерфейс Write
Обзор прикладного интерфейса доступа к данным
Обработка уведомлений
Основные реализации интерфейсов доступа к данным
Сериализация и десериализация собственных типов данных
Собственные реализации операции сохранения
Создание и удаление элементов

Анатомия Dijit и жизненный цикл
Анатомия библиотеки Dijit
Быстрое создание прототипов виджетов в разметке
Ваш первый диджит: HelloWorld
Диджит HelloWorld (Дубль 1: Основа)
Диджит HelloWorld (Дубль 2: Изменение шаблона)
Диджит HelloWorld (Дубль 3: Внедрение шаблона)
Диджит HelloWorld (Дубль 4: Передача параметров)
Диджит HelloWorld (Дубль 5: Обработка событий в диджитах)
Диджиты спешат на помощь
Жизненный цикл _Widget
Методы управления жизненным циклом
Методы управления жизненным циклом
Методы управления жизненным циклом диджита
Обзор принципов разработки веб-приложений
Организация отношений родитель–потомок с помощью классов _Container и _Contained
Основные свойства виджитов
Подмешивание класса _Templated

Анимация и специальные эффекты
Core fx
Анимация
Анимирование произвольных свойств CSS
Переключение
Программное управление анимацией
Свертывание
Скольжение
Создание цепочек и комбинирование эффектов
Цвета

Виджеты компоновки
AccordionContainer
BorderContainer
ContentPane
StackContainer
TabContainer
Общие особенности диджитов компоновки
Поддержка клавиатуры
Проблема видимости и отображения
Промедление (или отложенная загрузка) может повысить производительность
Создание программным способом

Виджеты приложения
ColorPalette
Dialog
Editor
InlineEditBox
Menu
ProgressBar
TitlePane
Toolbar
Tooltip
TooltipDialog
Tree
Архитектура диджита Editor
Виджеты диалогов
Модули расширения диджита Editor
Операция «перетащил и бросил» в дереве
Прикладной программный интерфейс деревьев
Пример реализации операции «перетащил и бросил» в дереве
Простое дерево
Простой лес
Реакция на событие щелчка мышью

Виджеты форм
Button
CheckBox
ComboBox
ComboButton
CurrencyTextBox
DropDownButton
FilteringSelect
Form
HorizontalSlider
MappedTextBox и RangeBoundTextBox
MultiSelect
NumberSpinner
NumberTextBox
RadioButton
SimpleTextarea
Slider
Textarea
TextBox
TimeTextBox и DateTextBox
ToggleButton
ValidationTextBox
VerticalSlider
Диджиты форм
Обзор элементов управления форм
Общие особенности DateTextBox и TimeTextBox
Разновидности Button
Разновидности Textarea
Разновидности TextBox
Сериализация данных перед отправкой серверу

Имитация классов и наследование
JavaScript – это не Java
Вызов унаследованных методов
Имитация классов с использованием средств Dojo
Множественное наследование посредством смешивания классов
Наследование в JavaScript
Основной шаблон создания класса
Особенности механизма множественного наследования
Пример простого наследования
Типичные ошибки при использовании механизма наследования на базе прототипов
Шаблон делегирования
Шаблон смешивания

Инструменты сборки, тестирования и вопросы подготовки к выпуску в эксплуатацию
Вопросы производительности
Запуск сборки
Настройка профиля
Настройка профиля (более грамотный вариант)
Платформа тестирования Dojo (DOH)
Преимущества использования сборок XDomain
Пример асинхронного теста, выполняемого в броузере
Пример теста, выполняемого в броузере
Профили сборки
Сборка
Средства оптимизации в ShrinkSafe и другие часто используемые параметры
Средства тестирования Rhino без использования Dojo
Средства тестирования Rhino с использованием Dojo
Стандартный профиль сборки
Тестирование в броузере

Интернационализация (i18n)
Даты, числа и денежные суммы
Интернационализация модуля
Использование инструментов сборки для повышения производительности
Объединим все вместе
Определение таблиц строк
Расположение файлов на диске

Манипулирование узлами
NodeList
Анимация
Аргументы в стиле «функции в виде строк»
Длинный и нестабильный способ
Методы, напоминающие методы массивов
Модуль Behavior
Пакетная обработка событий DOM
Подготовка к использованию dojo.query
Поиск: универсальная реализация
Пример наблюдения за состоянием
Размещение
Расширенная фильтрация
Создание расширений для NodeList
Создание цепочек обработки списков NodeList
Стиль

Обзор Dijit
WAI-ARIA
Библиотека Dijit для дизайнеров
Диджиты приложения
Диджиты размещения
Диджиты форм
Доступность
Независимость и самодостаточность
Определение методов в разметке
Парсер
Парсинг виджетов во время загрузки страницы
Парсинг виджетов вручную
Причины появления Dijit
Приятные мелочи
Раскрываем тайны парсера
Создание виджита в разметке
Создание программным способом
Темы
Типичные проблемы доступности
Узлы и диджиты, события DOM и методы диджитов

Обзор комплекта инструментальных средств
dojo.addOnLoad
dojo.byId
dojo.connect
Исследование Dijit
Исследование Dojo с помощью Firebug
Исследование библиотеки Base
Легковесный сервер ответов
Настройка с помощью djConfig
Настройка системы безопасности броузера для запуска Dojo на локальной системе
Обзор архитектуры Dojo
Отладка с помощью Firebug
Подготовка к работе
Получение Dojo
Самонастройка

Обработчики событий и организация взаимодействий по подписке
Использование замыканий с функцией dojo.connect
Нормализация событий и клавиатуры
Обработчики событий
Организация взаимодействий по подписке
Распространение событий

Перетаскивание элементов
Взаимодействие со сбрасываемыми объектами
Истинная зона сброса
Координата Z
Ограничение перемещений
Перетаскивание
Простые перемещения
Сброс
Собственные аватары
События сброса
События, возникающие при перетаскивании

Технология AJAX и взаимодействие с сервером
DeferredList
JSON
OpenAjax Hub
Внедрение объектов Deferred в функции XHR
Вызов удаленных процедур
Загрузка файлов с помощью IFRAME
Использование JSONP вместе с Dojo
Использование объектов Deferred, возвращаемых функциями XHR
Исследование объекта Deferred с помощью CherryPy
Краткий обзор AJAX
Межсайтовый скриптинг с использованием JSONP
Многоцелевая функция выполнения запросов через XMLHttpRequest
Модуль IO библиотеки Core
Объекты Deferred
Отправка формы с помощью IFRAME
Передача данных с помощью IFRAME
Подключение к источнику данных Flickr
Получение программного кода JavaScript с помощью вызова JSONP
Пример JSON RPC
Пример использования JSONP
Примеры применения функций XHR
Работать с AJAX просто
Собственная функция отмены
Создание скрытого фрейма IFRAME вручную
Типы ответов, отличные от HTML
Управление контекстом функций обратного вызова
Утилиты для работы с формами и HTTP

Утилиты броузера
Аргументы «функции в виде строк»
Блочная модель
Грубое определение типа
Добавление узлов
Зачем управлять беспорядком
Изменение стилей узлов
Манипулирование атрибутами
Манипулирование контекстом объекта
Обработка массивов
Обработчики событий и организация взаимодействий по подписке
Обход элементов
Определение родительского элемента
Определение типа
Поиск местоположения элементов
Поиск узлов DOM
Преобразование элементов
Пример с числами Фибоначчи при использовании локальной версии инструментария
Пример создания модуля для применения в составе версии XDomain
Проверка элементов на соответствие условию
Селективность
Создание примера модуля волшебного джинна
Управление исходным программным кодом с помощью модулей
Утилиты для работы с броузером
Утилиты для работы с деревом DOM
Утилиты для работы с объектами JavaScript
Утилиты для работы со строками