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

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

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

Регистрация: Oct 2006
Сообщений: 92
По умолчанию getItemIndex не работает!

Код:
var myArray :ArrayCollection = new ArrayCollection
([{name:"field1",dat:"AZ"},{name:"field2",dat:"MA"},{name:"field3",dat:"MZ"}]);

var dt:Object = {name:"field1", dat:"AZ"};

trace(myArray.getItemIndex({name:"field2", dat:"MA"}));// -1
trace(myArray.getItemIndex(dt));// -1

trace(myArray.getItemAt(0) == {name:"field1",dat:"AZ"});//false
trace(myArray.getItemAt(0) == dt);//false
Почему выводит -1?


Последний раз редактировалось Aleksey123; 13.11.2006 в 22:00.
Старый 13.11.2006, 20:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Потому что это разные объекты.

Старый 13.11.2006, 20:18
Aleksey123 вне форума Посмотреть профиль Отправить личное сообщение для Aleksey123 Найти все сообщения от Aleksey123
  № 3  
Ответить с цитированием
Aleksey123

Регистрация: Oct 2006
Сообщений: 92
Офигенно. Что значит разные? поподробнее можно? А кто-нибудь может исправить код?


Последний раз редактировалось Aleksey123; 13.11.2006 в 20:21.
Старый 13.11.2006, 20:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А что ты хочешь сделать?

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

Регистрация: Oct 2006
Сообщений: 92
Хочу узнать номер строки таблицы если мне известно содержимое ячейки.

Старый 13.11.2006, 20:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Нужно рыть весь массив и проверять соответствие всех свойств простого типа.
getItemIndex возвращает индекс элемента в коллекции, а параметром является ссылка конкретно на этот элемент, а не на другой созданный.

Старый 14.11.2006, 02:09
Aleksey123 вне форума Посмотреть профиль Отправить личное сообщение для Aleksey123 Найти все сообщения от Aleksey123
  № 7  
Ответить с цитированием
Aleksey123

Регистрация: Oct 2006
Сообщений: 92
Можешь написать маленький примерчик где используется ссылка на элемент в коллекции использую getItemIndex?

Старый 14.11.2006, 11:53
Aleksey123 вне форума Посмотреть профиль Отправить личное сообщение для Aleksey123 Найти все сообщения от Aleksey123
  № 8  
Ответить с цитированием
Aleksey123

Регистрация: Oct 2006
Сообщений: 92
Код:
public var myArray=new ArrayCollection
([{name:"field1",dat:"AZ"},{name:"field2",dat:"MA"},{name:"field3",dat:"MZ"}]);

public var myCursor:IViewCursor;    
myCursor=myArray.createCursor();
for(var i:int=0;i<myArray.length;i++){
  if(myCursor.current.name=="field2")
	trace("FOUND");      

 if(myCursor.current.name==dt.name && myCursor.current.dat==dt.dat)//Можно как-нибудь проще записать?
	trace("FOUND2");               		

        myCursor.moveNext();
  }
// if(myCursor.current==dt) не работает!
Так работает. А вот как использовать getItemIndex так и не понял. Хорошо бы пример посмотреть.


Последний раз редактировалось Aleksey123; 14.11.2006 в 11:59.
Старый 14.11.2006, 19:50
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 9  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
getItemIndex возвращает индекс конкренного ЭКЗЕМПЛЯРА твоего объекта.

Код:
var a:Object = { par1 : 1, par2 : 2}
var b:Object = { par1 : 1, par2 : 2}

var linkToA: Object = a;

trace(a==b) //false
trace(a==linkToA) // true
почему так?
потому что a и b хранят ссылки на ячейки памяти с данными, а не сами данные.
Со стороны кажеться что у a и b одинаковые данные, но они храняться в разных ячейках памяти. При их сравнении сравниваеться не данные на которые они ссылаються а именно адреса этих ячеек памяти.

a==linkToA - true потому что мы linkToA присвоили значение адреса ячейки памяти.
Если бы ты програмил на Assembler, C/C++, Pascal на худой конец, для DOS то было бы легче с этип разобраться - там "осязаемые" ячейки памяти. В As3 тоже самое, только эти ячейки не такие очевидные.

Поэтому ты не можешь просто получить индекс элемента зная его данные, ты должен знать именно "ссылку" на этот элемент.

Для твоего случая __etc все верно описал.
__________________
33 коровы

Старый 14.11.2006, 22:36
Aleksey123 вне форума Посмотреть профиль Отправить личное сообщение для Aleksey123 Найти все сообщения от Aleksey123
  № 10  
Ответить с цитированием
Aleksey123

Регистрация: Oct 2006
Сообщений: 92
Тогда вот такой код получается:
Код:
var myArray :ArrayCollection = new ArrayCollection
([{name:"field1",dat:"AZ"},{name:"field2",dat:"MA"},{name:"field3",dat:"MZ"}]);

var dt:Object = {name:"field1", dat:"AZ"};
var linkdt:Object=myArray[1];
trace(myArray.getItemIndex({name:"field2", dat:"MA"}));// -1
trace(myArray.getItemIndex(dt));// -1

trace(myArray.getItemAt(0) == {name:"field1",dat:"AZ"});//false
trace(myArray.getItemAt(0) == dt);//false 
trace(myArray.getItemAt(1) == linkdt);//true
Получается что это функция не удобная, где ее применять не понятно.

И еще. Если у меня 10 полей в таблице или больше мне каждый раз писать
Код:
 if(myCursor.current.pole1==dt.pole1 &&
             my Cursor.current.pole2==dt.pole2)&&
            ..............................
             my Cursor.current.pole3==dt.pole10)
Или можно проще сделать?


Последний раз редактировалось Aleksey123; 15.11.2006 в 01:00.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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