__i
09.08.2007, 17:39
И так начнем наш рассказ
Жили были два класса:
Класс В (в потому что биндабл)
package
{
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
[Bindable]
public class ItemVOB
{
private var _label : String;
public function set label( value:String ) : void
{
trace("I'm setter B");
_label = value;
}
public function get label( ) : String
{
return _label;
}
}
}
и класс А (потому что мне так захотелось)
package
{
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
public class ItemVOA
{
private var _label : String;
public function set label( value:String ) : void
{
trace("I'm setter A");
_label = value;
}
public function get label( ) : String
{
return _label;
}
}
}
И отличались они только одним словом. Все бы ничего, жили бы они долго и счастливо есть бы не решил я сделать такой ход конем
var ia : ItemVOA = new ItemVOA();
ia.label = 'hod konem';
....
ia.label = 'hod konem';
var ib : ItemVOB = new ItemVOB();
ib.label = 'hod konem';
....
ib.label = 'hod konem';
И тут госпада делаем ставки какой результат работы вы увидите?
I'm setter A
I'm setter A
I'm setter B
I'm setter B
а вот вам и болт результат будет
I'm setter A
I'm setter A
I'm setter B
теперь приблизительное объясние болта (вероятно не вразумительное и может содержать кучу арфагарфических и лагических ошибок )
Мета тег [Bindable] говорит компилятору что он должен создать обертку для свойства указаного под биндабл (если смотреть в дебагере то в классе с такой переменной коявляються такие интересные приватные сеттеры типа _13234234label, которые туда не клали). Эта обертка является тем же геттером/сеттером которая при получении какого либо значения диспатчит событие об изменении данных, ну и заодно в эту обертку вставили проверку на изменение данных, т.е. в приведенном случае 'hod konem' == 'hod konem' - фактически данные не изменились, поээтому, реальный сеттер просто не вызывается!
Применение на практике :
Данная фича свободно позволяет девелоперу почувствовать себя полным дауном, идиотом, потерять веру в компилятор, в дебагер, в жизнь, а также занимательно потратить много времени.
Следите за кодом и ходом вышей мысли, будте счастливы!
Жили были два класса:
Класс В (в потому что биндабл)
package
{
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
[Bindable]
public class ItemVOB
{
private var _label : String;
public function set label( value:String ) : void
{
trace("I'm setter B");
_label = value;
}
public function get label( ) : String
{
return _label;
}
}
}
и класс А (потому что мне так захотелось)
package
{
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
public class ItemVOA
{
private var _label : String;
public function set label( value:String ) : void
{
trace("I'm setter A");
_label = value;
}
public function get label( ) : String
{
return _label;
}
}
}
И отличались они только одним словом. Все бы ничего, жили бы они долго и счастливо есть бы не решил я сделать такой ход конем
var ia : ItemVOA = new ItemVOA();
ia.label = 'hod konem';
....
ia.label = 'hod konem';
var ib : ItemVOB = new ItemVOB();
ib.label = 'hod konem';
....
ib.label = 'hod konem';
И тут госпада делаем ставки какой результат работы вы увидите?
I'm setter A
I'm setter A
I'm setter B
I'm setter B
а вот вам и болт результат будет
I'm setter A
I'm setter A
I'm setter B
теперь приблизительное объясние болта (вероятно не вразумительное и может содержать кучу арфагарфических и лагических ошибок )
Мета тег [Bindable] говорит компилятору что он должен создать обертку для свойства указаного под биндабл (если смотреть в дебагере то в классе с такой переменной коявляються такие интересные приватные сеттеры типа _13234234label, которые туда не клали). Эта обертка является тем же геттером/сеттером которая при получении какого либо значения диспатчит событие об изменении данных, ну и заодно в эту обертку вставили проверку на изменение данных, т.е. в приведенном случае 'hod konem' == 'hod konem' - фактически данные не изменились, поээтому, реальный сеттер просто не вызывается!
Применение на практике :
Данная фича свободно позволяет девелоперу почувствовать себя полным дауном, идиотом, потерять веру в компилятор, в дебагер, в жизнь, а также занимательно потратить много времени.
Следите за кодом и ходом вышей мысли, будте счастливы!