![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
У меня возник вопрос. Есть небольшой участок кода
И... Alert.show('null !!!!!') отрабатывает. Может мне кто-то подсказать, почему так? Строка, найденная с помощью findAny, выделяется в DataGrid'е, но при этом selectedItem возвращает null. Последний раз редактировалось sangle; 08.10.2007 в 00:56. |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
Странно, но замена
на помогла. Я чето-то не понимаю, или есть разница между использованием свойств DataGrid'а: selectedIndex и selectedItem? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Речь о Flex или Flash CS3?
И что такое cur.current? И что такое «ac»? Почему нельзя давать более информативные названия объектам, переменным и т.п.? |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
Речь идёт о Flex'е.
ac - это коллекция (ArrayCollection). cur - это указатель, реализующий интерфейс IViewCursor, на коллекцию, который создаётся методом createCursor(); current - это свойство, указывающее на текущий элемент коллекции. Перепишу так: В вопросе подправил тоже. Последний раз редактировалось sangle; 08.10.2007 в 01:02. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
У ArrayCollection нет метода createCursor.
|
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
to __etc
Ну да . Интересно, как тогда работать с коллекциями?Это основной и единственный (при котором коллекцию не нужно "вручную" уведомлять об изменениях) коректный способ работы с коллекциями, если используется сортировка и фильтрация данных... ArrayCollecton наследуется от класса ListCollectionView, а в нём определём метод createCursor(): createCursor () method public function createCursor():IViewCursor Creates a new IViewCursor that works with this view. Returns IViewCursor — A new IViewCursor implementation. Последний раз редактировалось sangle; 08.10.2007 в 16:15. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Хм, вроде смотрел в inherited. Значит у меня билдер либо старый, либо врет =)
А можно весь код? Я не особый спец по флекс, тут без меня есть кому ответить. Но моделировать ситуацию с нуля лень, так что готовый код лучше) |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
to __etc
Приведу код функции с добавленными комментариями для Вас public function ChooseProduct(xml: XML): void {
treeCategories.selectedItem = xml; // в контексте нашего вопроса не важно
treeCategories.dispatchEvent(new Event(Event.CHANGE));
// запоминаем текущую сортировку коллекции, потому что её пользуются многие другие компоненты
var curSort: Sort = acProducts.sort;
//создаём новую сортировку
var sort: Sort = new Sort();
// определяем поля сортировки, в нашем случае одно
sort.fields = [new SortField('product_id', false, false, true)];
acProducts.disableAutoUpdate();
// меняем сортировку коллекции на новую
acProducts.sort = sort;
// обновляем коллекцию, потому что при измненении фильтрации и сортировки нужно вызывать refresh()
acProducts.refresh();
//создаём указатель на коллекцию
var cur: IViewCursor = acProducts.createCursor();
//поскольку коллекция отсортирована по product_id, то можно использовать такое свойство объекта для поиска
if(cur.findAny({product_id: dgMatches.selectedItem.product_id})) {
//если findAny вернул true, значит найден элемент в коллекции с нужным нам product_id
//dgProductsByCategory.selectedItem = cur.current; не работает, вернее не даёт результата
//поэтому вместо использования selecteItem приходится использовать selectedIndex,
//предварительно найдя индекс текущего элемента, хотя разницы не должно быть
dgProductsByCategory.selectedIndex = acProducts.getItemIndex(cur.current);
dgProductsByCategory.setFocus();
}
//возвращаем предыдущую сортировку, которой пользовался какой-то компонент до вызова текущей функции
acProducts.sort = curSort;
acProducts.refresh();
acProducts.enableAutoUpdate();
treeCategories.dispatchEvent(new Event(Event.CHANGE));
}
dgProductsByCategory: DataGrid; Последний раз редактировалось sangle; 08.10.2007 в 16:37. |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 32
|
Думаю, тему можно закрывать, потому что кое-какие мысли возникли.
Я забыл, что метод insert() для IViewCursor'а вставляет элемент перед текущим, не перемещая курсор. Поэтому свойство current возращает не вновь созданный элемент. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|