Система классов в Ext JS 4

Определение и использование классов

JavaScript не является в чистом виде объектно-ориентированным языком. Но с помощью прототипов можно имитировать классы, которые играют в Ext JS 4 важную роль, поскольку на классах завязано большая часть функционала фреймворка.

Для определения новых классов используется метод Ext.define:

Ext.define(className, members, onClassCreated);

Этот метод принимает следующие параметры:

Создадим примитивный класс.

Ext.define('Classes.Person', {
			name: 'Eugene',
			surname : 'Popov',

    getinfo: function() {
		alert("Полное имя : " + this.name + " " + this.surname);
    }
});

Что у нас тут делается? Мы определили класс Person, который находится в пространстве имен Classes. Затем задали набор свойств - в данном случае у нас два свойства: имя и фамилия. И каждое из этих свойств имеет значение по умолчанию. После свойств мы определили метод getinfo, который будет выводить собственно значения этих свойств.

Применим класс в приложению и создадим его объект. Для этого используется функция Ext.create. Пусть у нас будет следующая страница html:

<html>
<head>
    <title>Hello Ext</title>
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" >
    <script type="text/javascript" src="extjs/ext-all-dev.js"></script>
	<script>
	Ext.define('Classes.Person', {
			name: 'Eugene',
			surname : 'Popov',

    getinfo: function() {
		alert("Полное имя : " + this.name + " " + this.surname);
    }
});

    var eugene = Ext.create('Classes.Person');
    eugene.getinfo();
	</script>
</head>
<body></body>
</html>

Строки после определения класса показывают его использование: сначала мы создаем его объект (var eugene = Ext.create('Classes.Person');) и затем можем вызвать его единственнный метод (eugene.getinfo();).

В итоге после загрузки страницы у нас будет появляться сообщение с информацией о полном имени созданного пользователя.

Пространства имен

Для организации классов в логические группы используются пространства имен. Выше использовалось пространство имен Classes, но пространства имен могут иметь несколько уровней вложенности, например, Classes.Person.Manager или Company.Department.Division.

Изменение свойств

Выше мы использовали объект с установленными по умолчанию значениями свойств. Но мы можем во время выполнения их изменить:

<script>
		Ext.define('Classes.Person', {
			name: 'Eugene',
			surname : 'Popov',

    getinfo: function() 
	{
		alert("Полное имя : " + this.name + " " + this.surname);
    }
});

    var eugene = Ext.create('Classes.Person');
    eugene.getinfo();
	eugene.name='Vladimir';
    eugene.surname='Putin';
    eugene.getinfo();
</script>

Сущность создания классов

После определения каждый из классов превращается с помощью класса Ext.ClassManager в объект класса Ext.Class. Подобное превращение проходит два этапа: предобработку и постобработку, которые включают ряд действий.

На стадии предобработки инициализируются различные части класса. Таким образом, предобработчики запускаются до создания класса. Всего определены следующие предобработчики:

После завершения всех этапов предобработки начинается постобработка, на этапе которой срабатывают следующие обработчики:

Мы можем сами вывести все возможные обработчики в вывод консоли, применив следующие выражения:

var pre = Ext.Class.getDefaultPreprocessors(); // получаем предобработчики
var post = Ext.ClassManager.defaultPostprocessors; // постобработчики
console.log(pre);
console.log(post);
    Поддержать сайт на родительском проекте КГБ