Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.07.2012, 22:14
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 1  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Question изменение dataProvider в List при изменении источника

Добрый вечер. Как лучше обновлять dataProvider при изменении массива, являющегося моделью для данного списка. Варианта я вижу два:
1) при каждом изменении массива source писать list.dataProvider = new ArrayList(source);
2) не создавать новый ArrayList, а добавлять/обновлять/удалять элементы, соответствующие изменившимся;
какой лучше? (для простоты кода использую первый, но не уверен, что разумно).

Старый 06.07.2012, 23:40
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Вы используете dataProvider как Bindable?
Если да, то делайте с ним что хотите - все должно правильно отразиться (за исключением использования в list itemRenderer - тут возможны заморочки).
__________________
In Code We Trust

Старый 07.07.2012, 01:06
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 3  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Возражу: использование Bindable (свойство dataProvider и так можно использовать для привязки) будет решать проблему тогда, когда оно привязано к какому-то полю IList при его изменении (при изменении ссылки, а не содержимого). В моем случае есть модель, в которой есть массив (не IList). К нему нельзя привязать dataProvider. Поэтому приходится пользоваться одним из предложенных мною способов. Так что вопрос открыт: какой предпочтительнее?

Старый 08.07.2012, 00:03
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 4  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
а почему обязательно массив? Почему бы не использовать ArrayCollection, например, каждый из элементов которого некий объект, свойства которого тоже [Bindable] ?

Старый 08.07.2012, 00:39
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 5  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Потому, что это модель. Там нет конкретики того, как это будет отображаться. Поэтому наиболее абстрактно (и логично) хранить эти данные стоит в массиве. В принципе можно, конечно (я об этом уже подумывал), использовать коллекцию, но не хочется привязываться к какой-то флексовой реализации IList или писать свою.

Старый 08.07.2012, 01:23
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 6  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Хм, а зачем тогда флекс ?
P.S. В ArrayCollection я тоже не вижу особой конкретики, это некое хранилище, которое рассылает события о своем изсенении.

P.P.S. Ну если уж и ArrayCollection не подходит, отнаследуйтесь от Array, напишите свои события изменения этого массива (тот же самый ArrayCollection и получится)

Старый 08.07.2012, 15:40
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от Silicium Посмотреть сообщение
Потому, что это модель. Там нет конкретики того, как это будет отображаться. Поэтому наиболее абстрактно (и логично) хранить эти данные стоит в массиве.
Это у вас получился Value Object, а не модель. Модель, в отличие от VO, должна сообщать о своем изменении.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 08.07.2012, 17:07
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 8  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ну да, она сообщает, что в ней изменился массив данных. И обработчик события изменения изменяет вид, по первому способу:
list.dataProvider = new ArrayList(source);

Цитата:
P.P.S. Ну если уж и ArrayCollection не подходит, отнаследуйтесь от Array, напишите свои события изменения этого массива (тот же самый ArrayCollection и получится)
Фактически, это второй способ, только инкапсулированный в класс коллекции. Опять же, не хотел, чтобы в модели использовался тип коллекции только потому, что так удобно виду.

Старый 08.07.2012, 17:32
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от Silicium Посмотреть сообщение
Опять же, не хотел, чтобы в модели использовался тип коллекции только потому, что так удобно виду.
Используйте интерфейсы. На данный момент ни один компонент не требует прямого указания типа модели (а dataProvider это и есть модель для компонента). В итоге вы пытаетесь сделать модель для модели плодя лишние сущности. KISS.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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