Параметр Config
В 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.Name; } setSurname: function(value){ this.Name=value; } resetSurname: function(){ this.setName('Eugene'); } applySurname: function(name){ return name; } 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();