![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
И так начнем наш рассказ
Жили были два класса: Класс В (в потому что биндабл) 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'; а вот вам и болт результат будет теперь приблизительное объясние болта (вероятно не вразумительное и может содержать кучу арфагарфических и лагических ошибок ) Мета тег [Bindable] говорит компилятору что он должен создать обертку для свойства указаного под биндабл (если смотреть в дебагере то в классе с такой переменной коявляються такие интересные приватные сеттеры типа _13234234label, которые туда не клали). Эта обертка является тем же геттером/сеттером которая при получении какого либо значения диспатчит событие об изменении данных, ну и заодно в эту обертку вставили проверку на изменение данных, т.е. в приведенном случае 'hod konem' == 'hod konem' - фактически данные не изменились, поээтому, реальный сеттер просто не вызывается! Применение на практике : Данная фича свободно позволяет девелоперу почувствовать себя полным дауном, идиотом, потерять веру в компилятор, в дебагер, в жизнь, а также занимательно потратить много времени. Следите за кодом и ходом вышей мысли, будте счастливы!
__________________
33 коровы |
|
|||||
|
...и RTFM перед программингом.
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Собственно, а зачем обновлять значение, если старое совпадает с текущим?
В сеттерах лучше всегда писать так: |
|
|||||
|
Цитата:
А если я не юзал коллекций, и у меня из старого кода передаётся массив? А в сеттере ведётся перебор и апдейт элементов. То сеттер не будет вызван, т.к. предыдущий массив прежний объект, хоть и с иной структурой. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 256
|
Цитата:
![]() |
|
|||||
|
Цитата:
Атрибут Bindable - для тех лентяев, кто не хочет сам возиться с диспетчем сообщений - он это делает за вас. И механизм этого хорошо описан в документации, так что никаких проблем не вижу, все правильно сделано. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Надо просто поставить тест. Хотя не думаю, что оно не будет работать для непримитивов.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|