В Ext JS 4 классы при объявлении членов класса могут использовать секцию config
. Ее использование имеет некоторые преимущества по сравнению
с обычным объявлением свойств класса, как это было в предыдущих разделах главы. В частности:
Свойства в секции config
(конфигурации) полностью инкапсулируются от других членов класса
Для каждого свойства в секции config
автоматически создаются методы get
и set
, если эти методы
еще не определены в классе
Для каждого свойства в секции config
автоматически создается метод apply
. Этот метод вызывается методом
set
перед установкой значения свойства. И если метод apply
не возвращает никакое значение, то метод set
не будет устанавливать для свойства новое значение.
Таким образом, следующий класс
Ext.define('Classes.Person', { config: { name: 'Eugene', surname : 'Popov' }, constructor: function(config) { this.initConfig(config); }, getinfo: function(){ alert("Полное имя : " + this.name + " " + this.surname); }, });
будет эквивалентен следующему за счет автоматического создания методов для свойств в секции config
:
Ext.define('Classes.Person', { name: 'Eugene', surname : 'Popov', getName: function(){ return this.name; }, setName: function(value){ this.name=value; }, resetName: function(){ this.setName('Eugene'); }, applyName: function(name){ return name; }, getSurname: function(){ return this.surname; }, setSurname: function(value){ this.surname=value; }, resetSurname: function(){ this.setSurname('Popov'); }, applySurname: function(surname){ return surname; }, getinfo: function(){ alert("Полное имя : " + this.name + " " + this.surname); }, });
Конфигурация класса происходит с помощью метода initConfig и передаваемого ему параметра. Этот метод определен у
базового класса Ext.Base
и поэтому содержится и у всех остальных классов (так как они по сути являются наследниками Ext.Base).
Поэтому мы вполне можем использовать автоматически создаваемые методы:
var eugene = Ext.create('Classes.Person'); eugene.getinfo(); eugene.setName('Bill'); eugene.setSurname('Gates'); eugene.getinfo();
Если мы не хотим, чтобы использовался автоматически создаваемый метод, мы его можем задать явно. Например, мы не хотим, чтобы в качестве имени
можно было указать пустую строку. И для этого переопределим метод applyName
:
Ext.define('Classes.Person', { config: { name: 'Eugene', surname : 'Popov' }, applyName: function(name){ // удаляем из имени все пробелы name = name.replace(/\s/g, ''); // если после этого в имени ничего не осталось // выбрасываем ошибку if(name.length===0){ alert('Имя не может быть равно нулю'); } else{ return name; } }, constructor: function(config) { this.initConfig(config); }, getinfo: function() { alert("Полное имя : " + this.name + " " + this.surname); }, }); var eugene = Ext.create('Classes.Person'); eugene.getinfo(); eugene.setName(' '); // в этом месте будет отображаться сообщение с ошибкой eugene.setSurname('Gates'); eugene.getinfo();