Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   индуизм (http://www.flasher.ru/forum/showthread.php?t=151059)

scarbo 22.02.2011 00:32

индуизм
 
Встала тут задача написать кастомный NumericStepper.
Открыл исходный код
Код:

/**
    *  Maximum value of the NumericStepper.
    *  The maximum can be any number, including a fractional value.
    *
    *  @default 10
    */
    public function get maximum():Number
    {
        return _maximum;
    }

    public function set maximum(value:Number):void
    {
        _maximum = value;
       
        // To validate the value as min/max/stepsize has changed.
        if (!valueChanged)
        {
            this.value = this.value;
            valueSet = false;
        }
       
        dispatchEvent(new Event("maximumChanged"));
    }

Это индуизм или все таки описка, а в swc все норм?Строка 693
Flex 3

Psycho Tiger 22.02.2011 00:57

Отсюда не видно. value может быть сеттером и его захотели дёрнуть.

scarbo 22.02.2011 02:30

сеттер конечно, но this.value = this.value, это берут данные из геттера и присваивают сеттеру:)

Котяра 22.02.2011 04:10

сам так писал иногда.
например в сеттере у меня отсылалось оповещение об изменении.
Код AS3:

public function someMethod(value)
{
// по каким то причинам надо присвоить именно аксцессору, например используется в дальнейших вычислениях
this._value=value;
doSmthWith_value();
// а тут вычисления закончились и можем спокойно вызвать диспатч изменения
this.value = this.value;
}

Криво немного, но зависит от контекста . Так что я бы не дал такому коду звание индусского.. не тянет.

wvxvw 22.02.2011 10:43

Нормальный компилятор должен такой код вырезать еще на этапе чтения исходников. :) Почти наверняка этот сеттер нужно "дернуть" чтобы биндинги сработали. Т.е. чтобы продиспатчить событие, но решили замазать дырку, вместо того, чтобы сделать по-человечески.

etc 22.02.2011 12:25

У меня такое тоже есть. Практическая цель — «передёрнуть» сеттер для валидации.

fljot 22.02.2011 14:28

Цитата:

Сообщение от etc (Сообщение 975305)
У меня такое тоже есть. Практическая цель — «передёрнуть» сеттер для валидации.

А вы чего не делаете if (_prop == value) return; ?

etc 22.02.2011 14:35

Цитата:

Сообщение от fljot (Сообщение 975338)
А вы чего не делаете if (_prop == value) return; ?

Делаю, конечно. История долгая, но суть примерна та же, что и в оп-посте: устанавливается максимум некоторого значения, потом происходит валидация этого значения путём «передёргивания» сеттера. В нём же стоит проверка:

Код AS3:

if (value > this._maximum) value = this._maximum;
if (this._value == value) return;
...

Поэтому если изначально значение было больше, оно отвалидируется.

Неочевидный приём и за него надо давать по рукам, если есть кому :D
Ну и потом, иногда полезен для on-demand геттеров.

alatar 22.02.2011 20:06

Цитата:

Неочевидный приём и за него надо давать по рукам, если есть кому
Видимо так и поступили, в четвертой ветке этот финт ушами переделали.
В третьей ветке это "решение" служило одной единственной цели, проверить, в конце-концов, value на валидность после изменения диапазона. Так что решение более чем неочевидное :)

Silicium 24.02.2011 21:47

Я вот не так давно использовал в коде строчку:
Код AS3:

simpleItemRenderer.data=simpleItemRenderer.data;

Сама по себе она выглядит странно, но в такой связке:
Код AS3:

simpleItemRenderer.data.text="Text";
simpleItemRenderer.data=simpleItemRenderer.data;

смысл ее становится понятен)))))


Часовой пояс GMT +4, время: 13:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.