Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   изменение itemRender'a в List'e (http://www.flasher.ru/forum/showthread.php?t=121252)

tikhop 11.02.2009 15:38

изменение itemRender'a в List'e
 
Проблема следующая:

Имеется компонент, хранящий переменную "isLogin" и List компонент с custom itemRender.

Код AS3:

...........
 
[Bindable]
public var isLogin:Boolean
 
<mx:List id="actList"
        itemRenderer="ActListItemRender"
        dataProvider="{dataList}"
        />
 
...........

В самом рендере следующее:
Код AS3:

............
 
<mx:Button
                x="111" y="31"
                width="16" height="16"
                styleName="playDemand"
                enabled="{(parent.parent.parent as ActList).isLogin}"/>
 
............


Замускаем -> переменная isLogin=false -> все отображается как надо -> мы логинемся -> переменная меняется isLogin=true -> а кнопка как была enabled = false так и осталось, меняется на true, только после того как мы проскролим лист....

Почему кнопка не становится enabled = true, сразу как мы меняем значение переменной "isLogin" на true, ведь переменная "isLogin" "забиндина"?

mitado 11.02.2009 17:53

в таких случаях лучше инкапсулировать класс
- создать переменную внутри ItemRenderer, и назначать ее из List

GBee 11.02.2009 18:12

Лучше напрямую Рендереру ничего не давать, а управлять через датаПровайдер. Но для решения вашей проблемы видно несколько способов (правда все почти корявые).

1) Пробежаться по даталисту и сменить свойство изЛогин у каждого объекта (не рендерера)
2) Сделать паблик статическую переменную в рендерере (фууу)
3) Сделать рендерер без кнопки(зачем она нам дисабленная во всех рендерерах - не красиво же) и менять его при смене изЛогин (хм)
4) Что нить более правильное.

Добавлено через 2 минуты
Вдогонку, вообще не люблю рендереры с кнопками. Лучше галочки! Тогда доступны массовые операции. Одну кнопку легче залочить.

tikhop 11.02.2009 18:18

Цитата:

Сообщение от mitado (Сообщение 797583)
в таких случаях лучше инкапсулировать класс
- создать переменную внутри ItemRenderer, и назначать ее из List

переменная есть, но как менять её значение из List?

Добавлено через 6 часов 25 минут
Вобщем решил я эту задачу: пришлось вносить новый параметр в базу, которая указывается dataProvider'ом в List...

Но, хотелось бы "услышать" другие варианты, решения этой задачи.

GBee 12.02.2009 10:17

А мои не рассматривали? :о(( И нашли совсем аццки брутальный...

tikhop 12.02.2009 14:05

Цитата:

Сообщение от GBee (Сообщение 797730)
А мои не рассматривали? :о(( И нашли совсем аццки брутальный...

Цитата:

1) Пробежаться по даталисту и сменить свойство изЛогин у каждого объекта.
Как это делается? не совсем понял...

Цитата:

2) Сделать паблик статическую переменную в рендерере (фууу)
Как менять эту статическую переменную?

Цитата:

3) Сделать рендерер без кнопки(зачем она нам дисабленная во всех рендерерах - не красиво же) и менять его при смене изЛогин (хм)
Это не реально, в моем случае.

GBee 12.02.2009 16:24

1) dataProvider="{dataList}"
dataList у вас кто? В принципе не важно, каждому объекту-элементу этого списка можно менять проперть (не на сервере), которая прибиндена к енаблю кнопки.

2) moiListItemRenderer.isLogin = true;

В принципе я не рассмотрел еще вероятность того что, isLogin скорее всего переменная для всего приложения, которая показывает залогинен ли юзер в этом приложении, таким образом, проще всего ее сделать статично публичной.

И еще как вариант можно попробовать при смене изЛогин проинвалидейтить лист, правда я не знаю можно ли. Тогда по идее ваш первоначальный код будет работать.

Но мне самому все это не очень нравится, как я уже говорил.

tikhop 12.02.2009 17:40

В принципе задача и была решена, способом номер 1, просто не сразу понял, что Вы имеете ввиду...

А вот пункт номер 2, я так и не понял. покажи примером)


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

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