Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   getItemIndex не работает! (http://www.flasher.ru/forum/showthread.php?t=87889)

Aleksey123 13.11.2006 19:33

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?:umnik2:

etc 13.11.2006 20:12

Потому что это разные объекты.

Aleksey123 13.11.2006 20:18

Офигенно. Что значит разные? поподробнее можно? А кто-нибудь может исправить код?

etc 13.11.2006 20:19

А что ты хочешь сделать?

Aleksey123 13.11.2006 20:39

Хочу узнать номер строки таблицы если мне известно содержимое ячейки.

etc 13.11.2006 20:43

Нужно рыть весь массив и проверять соответствие всех свойств простого типа.
getItemIndex возвращает индекс элемента в коллекции, а параметром является ссылка конкретно на этот элемент, а не на другой созданный.

Aleksey123 14.11.2006 02:09

Можешь написать маленький примерчик где используется ссылка на элемент в коллекции использую getItemIndex?:away:

Aleksey123 14.11.2006 11:53

Код:

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 так и не понял. Хорошо бы пример посмотреть.

__i 14.11.2006 19:50

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 все верно описал.

Aleksey123 14.11.2006 22:36

Тогда вот такой код получается:
Код:

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)

Или можно проще сделать?


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

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