Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

Witam

Zgłaszam się do Was z kolejnym problemem, na który nigdzie nie mogę znaleźć rozwiązania.

Mam taki kod:
private function wezElementZkosza(elem:elementKosza):elementKosza{
kursor = elementyKosza.createCursor();
sortKosz();
var found:Boolean = kursor.findFirst(elem);
trace("elem: "+elem.produkt.nazwa_prod.toString());
trace("found: "+found.toString());
if(found){
var elk:elementKosza = kursor.current as elementKosza;
}else{
return null;
}
return elk;
}

Kod ma za zadanie sprawdzić czy w zmiennej "elementyKosza" zawiera się element "elem".
Jeśli go tam nie ma to funkcja powinna zwrócić wartość FALSE. Jeśli jest to zwrócić ma TRUE i wsadzić znaleziony element do zmiennej "elk".

OK, w czym problem?
Problem w tym, że jak już mamy jakiś element w "elementyKosza" i kursor porównuje jego zawartość z "elem" to mimo iż ten element nie zawiera się w "elementyKosza" to i tak skubaniec zwraca wartość TRUE i od 9 godzin nie mogę dojść dlaczego.

Dodatkowo ten kod jest żywcem z książki, przekazanie zmiennej identycznie jak w książce, wywołanie funkcji też, z tą różnicą że przykład z ksiązki (działa) pobiera dane z pliku xml a ja z bazy MySQL.
Robiłem trace zmiennej wypełnionej danymi z xmla jak i mysql i budowa jest identyczna.
Nie mam już pomysłów co tu może być nie tak :/Ireneusz Grrr edytował(a) ten post dnia 10.08.10 o godzinie 00:32
Tomasz Morawski

Tomasz Morawski człowiek
orkiestra...

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

podaj ciało metody sortKosz()

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

http://balazs.sebesteny.com/iviewcursorfindfirst/

FindFirst
"If the item can not be found, no cursor location does not change. "

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

Tomasz Morawski:
podaj ciało metody sortKosz()
private function sortKosz():void{
var elementySort:Sort = new Sort();
var sortField:SortField = new SortField("produkt");
elementySort.fields = new Array(sortField);
elementyKosza.sort = elementySort;
elementyKosza.refresh();
}

Wojciech Brochowicz:
http://balazs.sebesteny.com/iviewcursorfindfirst/

FindFirst
"If the item can not be found, no cursor location does not change. "
Dzięki za linka.
Czyli nie da się tego rozwiązać? Gość z linka tego problemu nie rozwiązał.
Nadmienie, że przykład książkowy funkcjonuje poprawnie, a nie różni się niczym poza nazwami zmiennych i funkcji.

No, czymś się musi różnić skoro nie działa.
A właśnie, używam polskich znaków np. w nazwie produktu lub opisie, ale kodowanie mam ustawione poprawnie.Ireneusz Grrr edytował(a) ten post dnia 10.08.10 o godzinie 18:39
Stanislaw Żółkiewski

Stanislaw Żółkiewski Looking for an
excellent job

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

>"If the item can not be found, no cursor location does not change. "

No i racja. Wszystkie Wojtki to mądre chłopaki.

>Czyli nie da się tego rozwiązać? ....

Da się, da :)

Masz kilka błędów w kodzie:

1. Używasz klasy elementKosza, w niej klasę Produkt, a ta ma pole nazwa_prod. Jak miałoby się odbywać sortowanie? Jeśli po produkcie, to nadal nie wiadomo jak to robić - to twoja klasa i tylko Ty wiesz jakie jest kryterium sortowania - musisz programowi to podpowiedzieć. Np:


var sortField:SortField = new SortField("produkt");
sortField.compareFunction = compareFunction;

(...)

private function compareFunction (o1:Object , o2:Object, fields:Array = null):int {

if ((o1 as elementKosza).produkt.nazwa_prod > (o2 as elementKosza).produkt.nazwa_prod) return 1;
if ((o1 as elementKosza).produkt.nazwa_prod < (o2 as elementKosza).produkt.nazwa_prod) return -1;
return 0;
}


Teraz sortowanie dopiero zadziała.

2. IViewCoursor nie zwraca true, jak coś znajdzie, zmienia tylko pozycję kurosa. Zwracana wartość true/false informuje o czymś innym (chodzi i remote collections)

3. Do sprawdzenia, czy element jest w kolekcji wystarczy poprostu

elementyKosza.contains(elem);
// lub (jeśli mam wielka ochotę użyć kursorów)
kursor.view.contains(elem);

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

Dziękuje za wytłumaczenie :)
Jak wrócę z pracy to wezmę się za wdrażanie zmian i dam znać co wyszło.
Jarek Szczepański

Jarek Szczepański Flash Platform
Developer

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

Stanislaw Żółkiewski:
3. Do sprawdzenia, czy element jest w kolekcji wystarczy poprostu
elementyKosza.contains(elem);
// lub (jeśli mam wielka ochotę użyć kursorów)
kursor.view.contains(elem);

tyle, że .contains(elem) to zwykły wrapper na metodę getItemIndex, która to z kolei działa tylko z referencjami obiektów z kolekcji. Czyli jak podasz mu obiekt który jest identyczny do jakiegoś w kolekcji, ale jest stworzony przez "new" to nic z tego... nie znajdzie :)

JarekJarek Szczepański edytował(a) ten post dnia 11.08.10 o godzinie 13:23
Tomasz Morawski

Tomasz Morawski człowiek
orkiestra...

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

a może by tak przestać być leniwcem i napisać własne metody wyszukiwania dla własnych klas? ;) kontrola większa, możliwe że prostszy kod, no i czegoś nauczyć się można, polecam :)

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

Tomasz Morawski:
a może by tak przestać być leniwcem i napisać własne metody wyszukiwania dla własnych klas? ;) kontrola większa, możliwe że prostszy kod, no i czegoś nauczyć się można, polecam :)

Nie jestem leniwy ;)
Z racji tego że dopiero zacząłem pisać we Flexie, daleko mi jeszcze do własnych zaawansowanych metod wyszukiwania. Mam przed sobą książkę i staram się z niej czegoś nauczyć :)

A przykład, mimo tego że książkowy, co do którego byłem pewien, że będzie działać to Pan Stanisław znajduje w nim szereg błędów (za co bardzo dziękuję bo warunek wykonuje się teraz poprawnie), co jest dla mnie szokujące, bo nie powinno być w oficjalnym podręczniku takich baboli ;)
Tomasz Morawski

Tomasz Morawski człowiek
orkiestra...

Temat: Wyszukiwanie w ArrayCollection za pomocą kursora

podręczniki do księgarni! ;)

Następna dyskusja:

Unieruchomienie kursora




Wyślij zaproszenie do