
- •13. Создание динамического наполнения страницы. JavaScript-библиотеки и технология Comet
- •13.1. Представление объектов в виде json
- •13.1.1. Использование
- •13.1.2. Синтаксис
- •13.1.3. Использование json в Ajax
- •13.1.4. Вопросы безопасности
- •13.1.4.1. JavaScript eval()
- •13.1.4.2. Подделка кроссдоменного запроса
- •13.2. Библиотека ExtJs
- •13.2.1. Объектно-ориентированное программирование
- •13.2.1.1. Ext.Namespace
- •13.2.1.2. Ext.Override
- •13.2.1.3. Ext.Extend и соглашения о параметрах конструкторов
- •13.2.1.4. Ext.Apply
- •13.2.1.5. Ext.ApplyIf
- •13.2.2. Построение веб-интерфейсов
- •13.2.3. Использование css
- •13.2.4. Основные компоненты и возможности
- •13.2.5. Визуальные компоненты
- •13.3. Библиотека Prototype
- •13.3.1. Возможности
- •13.3.1.6. Объект Ajax
- •13.3.1.7. Класс Element
- •13.3.2. Объектно-ориентированное программирование
- •13.4. Библиотека jQuery
- •13.4.1. Философия
- •13.4.2. Использование
- •13.4.4. Инициализация
- •13.4.5. Управление элементами документов и их свойствами
- •13.4.5.1. Последовательный вызов функций
- •13.4.6. Работа с индивидуальными элементами
- •13.4.6.1. Индексы и get([index])
- •13.4.6.2. Each(fn)
- •13.4.7. Анимации
- •13.4.7.1. Animate
- •13.4.7.2. Эффекты
- •13.4.8. Ajax
- •13.5. Модель работы веб-приложений Comet
- •13.5.1. Http server push
- •13.5.2. Pooling
- •13.6. Ключевые термины
- •13.7. Краткие итоги
13.2.1.3. Ext.Extend и соглашения о параметрах конструкторов
Синтаксис:
Ext.extend( Function superclass, Object overrides ) : Function
или
Ext.extend( Function subclass, Function superclass, [Object overrides] ) : Function
Рассмотренный ранее метод Ext.override выполняет замену реализации на новый метод целиком, а Ext.extend позволяет осуществить полноценное наследование согласно парадигме ООП. Имеются два варианта вызова этого метода, каждый из которых возвращает определение нового класса, содержащего объекты, унаследованные от родительского, определенного в параметре superclass, и перекрывает методы, заданные в параметре overrides. Также он добавляет к новому классу служебный метод override(), который дает возможность перекрывать методы экземпляра класса, и такое же служебное свойство superclass, позволяющее получить доступ к родительскому объекту.
Библиотека ExtJS имеет ряд соглашений о стиле кодирования, которые позволяют улучшить поддержку и читаемость написанного кода. Одно из них: соглашение о виде конструкторов классов. Практически все конструкторы ExtJS принимают единственный параметр, являющийся объектом нотации в формате JSON и содержащий конфигурацию того или иного компонента. Для приверженцев традиционных объектно-ориентированных языков программирования на первый взгляд это может показаться диким, так как обычно сигнатуры методов (включая конструкторы классов) ожидают явно заданные параметры с жестко определенным типом. Но из-за того, что JavaScript динамически типизированный язык, создавать таким образом объекты с помощью классов не всегда удобно.
Ниже приведен пример использования Ext.extend. Обратите внимание, что имеются два способа наследования. Первый:
var newClass = Ext.extend(Ext.form.ComboBox, {
constructor: function(config) { // явное задание конструктора
config.emptyText = "'5' не допускается";
newClass.superclass.constructor.call(this, config);
},
setValue: function(v) {
if (v == 5) { // если v равно 5, сообщить пользователю
alert("'5' не допускается");
} else { // иначе вызываем метод родителя
newClass.superclass.setValue.call(this, v);
}
}
});
Второй:
function newClass(config) { // конструктор
config.emptyText = "'5' не допускается";
newClass.superclass.constructor.call(this, config);
};
Ext.extend(newClass, Ext.form.ComboBox, {
setValue: function(v) {
if (v == 5) { // если v равно 5, сообщить пользователю
alert("'5' не допускается");
} else { // иначе вызываем метод родителя
newClass.superclass.setValue.call(this, v);
}
}
});
Так как все объекты ExtJS имеют одну и ту же форму указания параметров в конструкторе, это позволяет работать с ними без особых усилий: достаточно скопировать все значения объекта config. ExtJS имеет два встроенных метода для выполнения этих действий, которые далее будут рассмотрены.
13.2.1.4. Ext.Apply
Синтаксис:
Ext.apply( Object obj, Object config, [Object defaults] ) : Object
Метод Ext.apply производит копирование каждого члена объекта config в объект obj. Опционально может быть задан параметр defaults, содержимое которого также копируется в объект obj, но перед выполнением копирования объекта config.