-
Data: 2015-03-22 10:05:38
Temat: Re: Jaki algorytm do komponentu drzewka?
Od: Dariusz Jakubowski <c...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 2015-03-22 08:39:04 +0000, Borneq said:
> W dniu 2015-03-22 o 09:29, Dariusz Jakubowski pisze:
>> Mogłbym Ci pomóc (ale nie napisać za Ciebie pracę zaliczeniową w
>> całości) napisać taki algorytm w JS z reprezentacją wizualną w DOM. Chcesz?
>
> Dzięki za zainteresowanie.
> Nie pytam się o gotowca, język też nie jest ważny. Tylko jestem ciekawy
> algorytmu pomiędzy Modelem a Widokiem, jakich struktur, pól warto użyć.
> Bo np. odrzucam listę wizualnych z powodu tego , że trzeba ją updatować
> przy dodawaniu elementów a tych może być 100 tysięcy.
> Czy trzymanie VisibleCount jest jedynym dobrym rozwiązaniem? Kiedyś
> pisałem właśnie komponent drzewka oparty o to, ale wyszedł bardzo
> skomplikowany. Teraz chciałem napisać prosty, elegancki, z mniejszą
> ilością kodu a co najważniejsze, łatwiejszy do zrozumienia.
>
> Pozdrawiam
Chyba rozumiem. Model powinien wyglądać tak:
Item {expanded, Bool, hasMany: Item as children, belongsTo: Item as parent}
Rekordy są wszystkie w jednej tablicy na tym samym poziomie i mają
swoje pole id (to konieczne). Ręcznie tworzysz pierwszy rekord o id 0
i nazywasz go Root albo / (albo w ładniejszej wersji wyszukujesz
wszystkie które nie mają parent, wtedy możesz mieć kilka rootów). Zeby
znaleźć lokalizacje jakiegokolwiek modelu robisz:
var item = <przekazany rekord>
var position = []; do {
position.push(item.id);
item = item.parent;
} while (item)
position = position.reverse().join(' => ');
print(position);
Punkt 2 mowisz ze wiesz to nie bede tlumaczyl. Liczenie rozwinietych
pozycji nie moze byc trzymane w jakiejś właściwosci, najwyzej cachowane
az do kolejnej zmiany. Mozesz sobie napisac funkcje getVisibleCount:
<sprawdzasz czy model mial aktualizacje, jak tak to kontunuujesz a jak
nie to zwracasz ostatni wynik>
var item = <przekazany rekord albo root>
var visible = 0;
if (item.expanded && item.children) {
visible += 1; // dodajemy aktualny wezem do visible;
// mapujemy ilosc visible podwezlow i sumujemy wszystkie. To rekurencja
visible += item.children.map(function (node) {
return getVisibleCount(node);
}).sum();
} do
return visible;
Wydaje mi się że to w miare rozsądny algorytm. Zawsze możesz podejrzeć
jak to robi jakiś inny framework i zgapić.
Następne wpisy z tego wątku
- 22.03.15 10:22 Borneq
- 22.03.15 10:26 Dariusz Jakubowski
- 22.03.15 10:47 Borneq
- 22.03.15 19:33 Dariusz Jakubowski
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-20 Gdańsk => Programista Full Stack .Net <=
- 2025-01-20 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-01-20 Warszawa => Full Stack .Net Engineer <=
- 2025-01-20 huta ruszyla
- 2025-01-20 piece wodorowe
- 2025-01-20 Lublin => Programista Delphi <=
- 2025-01-20 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-20 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-01-20 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)