Toon posts:

HTML/Javascript Tree

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende:

Ik moet een tree genereren. Dit kan uiteraard in Javascript of in PHP. Echter is de tree heel groot, meer dan 1500 items. Javascript duurt te lang, de client (550 mhz pc) doet er 20 sec over om de tree te genereren (TreeView). Ook andere trees zijn te traag. Een oplossing zou zijn om de hoofdmappen van de tree niet in JS te doen maar in PHP en vervolgens een Tree te generen van wat eronderzit. Echter wil mijn opdrachtgever dat je de refreshes minimaliseert (zichtbare refreshes wel te verstaan). Wat is een goede oplossing hiervoor? (misschien de tree zoals op MSDN, heeft iemand hier ergens een goed voorbeeld van?)

  • Johnny
  • Registratie: December 2001
  • Laatst online: 15-05 23:15

Johnny

ondergewaardeerde internetguru

xmlHTTP.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-05 16:42

André

Analytics dude

http://www.nobellaan.nl/astree/

Die doet er geen 20sec over ;)

Verwijderd

Topicstarter
Van de astree, kan ik daarvan een example zien met 1500 nodes om even te testen op die trage bak?

Verwijderd

O-)

http://www.mschopman.demon.nl/treeview_v1.6/treeview.html

Ik ben nog een paar methods vergeten, was pas begonnen met de documentatie.

Mogelijkheden voor ondemand, uitklappen volgens een bepaald pad, selectie mogelijkheden voor index, attribute of label, etc.. En er wordt continue aan geknutseld, voornamelijk na 17:00 wanneer GTST, ONM, en DM op tv zijn. Sommige mensen vinden dat nl. niet zo bijzonder interessant in tegenstelling tot de vrouw.

[ Voor 57% gewijzigd door Verwijderd op 20-01-2005 16:41 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

* curry684 ragt wederom webdesign naar Webdesign & Graphics, how hard can it be :?

Professionele website nodig?


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-05 16:42

André

Analytics dude

Verwijderd schreef op donderdag 20 januari 2005 @ 16:32:
Van de astree, kan ik daarvan een example zien met 1500 nodes om even te testen op die trage bak?
Download hem en zet met copy/paste in 5 seconden 1500 items in de tree. Ik zelf heb er mee gewerkt op een PIII 700 met 4000 items en dat ging prima.

Speciaal voor jou met 2000 items:
http://www.nobellaan.nl/astreetemp/

Bij mij in 4 seconden en dat is te lang???? Een gemiddelde website doet er langer over om te laden.

[ Voor 20% gewijzigd door André op 20-01-2005 16:44 ]


Verwijderd

Maar uberhaupt 1500 items, dan is het geen techisch probleem maar een verkeerde aanpak. De windows explorer treeview zal ook niet zo blij worden als je hem 1500 items voor zijn kiezen gooit :)

Verwijderd

Topicstarter
De astree duur op mijn lappie (1 ghz p3) ruim 4 sec. Veel te lang.

Verwijderd

Topicstarter
We hebben zo'n zelfde tree in VB. Deze heeft er geen enkel probleem mee.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op donderdag 20 januari 2005 @ 16:43:
De astree duur op mijn lappie (1 ghz p3) ruim 4 sec. Veel te lang.
Normaal doet ie er 20 seconden over :? Hoe snel wil je het hebben :/

editten is voor mietjes :?

[ Voor 8% gewijzigd door BtM909 op 20-01-2005 16:45 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Ik denk dat het wel lukt met XMLHTTP. Deze kan na het klikken van een item, de delen van de tree downloaden. Dit zorgt ervoor dat je niet hoeft te refreshen en dat de tree snel gegenereerd kan worden.

Verwijderd

Verwijderd schreef op donderdag 20 januari 2005 @ 16:47:
Ik denk dat het wel lukt met XMLHTTP. Deze kan na het klikken van een item, de delen van de tree downloaden. Dit zorgt ervoor dat je niet hoeft te refreshen en dat de tree snel gegenereerd kan worden.
Kijk is naar mijn post ... :X :D Wat denk je dat ik doe, jouw een nieuw treeview pakketje sturen als je een node uitklapt en mij opbelt om te vragen of ik jouw subitems wil sturen :P

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op donderdag 20 januari 2005 @ 16:47:
Ik denk dat het wel lukt met XMLHTTP. Deze kan na het klikken van een item, de delen van de tree downloaden. Dit zorgt ervoor dat je niet hoeft te refreshen en dat de tree snel gegenereerd kan worden.
Heb je die van Gordijn al bekeken?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Ja, dit van gordijn lijkt me wel ok. Echter is deze pagina enorm traag. Kan ik hem ergens downloaden en even testen?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op donderdag 20 januari 2005 @ 16:50:
Ja, dit van gordijn lijkt me wel ok. Echter is deze pagina enorm traag. Kan ik hem ergens downloaden en even testen?
Ik hoop dat je wat meer moeite doet, dan dat je hier doet voorkomen :/

Probeer het eens zou ik zeggen, GoT is geen persoonlijk helpdesk voor je.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Sorry,

ik heb hem al. Lokaal is hij veel sneller, precies wat ik zoek. Is deze rijp voor een productie omgeving en zoja, wat kost hij?

Verwijderd

Nog een laatste goedbedoelde zucht, ..

http://www.mschopman.demon.nl/treeview_v1.6.rar

Maar je moet echt zelf wel actie ondernemen, de examples staan in de code, en in de pagina. Het moet zich eigenlijk vanzelf wijzen. Als je een method mist, .. al lijkt me dat sterk, dan moet je me maar even vragen.

Verwijderd

Verwijderd schreef op donderdag 20 januari 2005 @ 16:54:
Sorry,

ik heb hem al. Lokaal is hij veel sneller, precies wat ik zoek. Is deze rijp voor een productie omgeving en zoja, wat kost hij?
De methods rename en de drag n drop functionaliteit botsen nog met elkaar (dank BTM909, mijn persoonlijk test slaafje).

Hij is niet productie klaar, want bijv. de rename method moet je niet gaan gebruiken in combinatie met de drag n drop (selecteren van de tekst gaat dan een drag starten) maar die wordt op korte termijn gefixed omdat ik hem zelf ook gebruik. Een productie versie verwacht ik binnenkort, uit eigenbelang. Hij is in principe wel beland in de laatste fase.

Voor de rest wordt hij vrij intensief getest door normaal gebruik.

[ Voor 9% gewijzigd door Verwijderd op 20-01-2005 16:59 ]


Verwijderd

Topicstarter
Ok. Ik ga hem gebruiken (prijs? en eerst testen uiteraard).

Verwijderd

Verwijderd schreef op donderdag 20 januari 2005 @ 16:59:
Ok. Ik ga hem gebruiken (prijs? en eerst testen uiteraard).
Prijs? .. kratje bier.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waarvan 1 Palm O-)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-05 16:42

André

Analytics dude

Mooie tree Gordijnstok, alleen het nadeel van die dingen vind ik dat je bij elke klik weer moet wachten totdat de node geladen is.

Verwijderd

André schreef op donderdag 20 januari 2005 @ 17:01:
Mooie tree Gordijnstok, alleen het nadeel van die dingen vind ik dat je bij elke klik weer moet wachten totdat de node geladen is.
Hoeft niet, hij kan ook preloaded gebruikt worden. Ik toon nu alleen de on demand versie :)

In de eerste versie toon ik de direct versie ook. De eerste treeview is ondemand, de tweede daaronder is preloaded.

http://www.mschopman.demon.nl/treeview/treeview.html

Verder ben ik volgens mij vergeten het laad icoontje te uppen, maarja, als BTM909 huilend aan je MSN hangt voor een nieuwe versie .. dan vergeet je dat wel eens :P

En ik mis nog wat methods zag ik, maar die komen wel in de volgende versie van de docs erbij :) Dit was even quick n dirty voor btm909.

Ik was al bezig met de volgende versie, maar die ligt nu een beetje uit elkaar omdat ik hem zelf ook gebruik in een cms, en daar is hij in eerste instantie voor ontwikkeld. In 1.6 zitten nog geen individuele listeners (die niemand ooit zou willen gebruiken behalve ikzelf .. :P).

[ Voor 61% gewijzigd door Verwijderd op 20-01-2005 17:13 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

2x verkeerd getypt :( :'(

En dat als test-slet ;(

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Klopt het dat jouw tree is gebaseerd op:

http://webfx.eae.net/dhtml/xloadtree/implementation.html

Want deze lijkt me makkelijker, ook om aan te passen omdat allerlei features als add, remove en het verplaatsen er niet in zitten?

Verwijderd

Verwijderd schreef op donderdag 20 januari 2005 @ 17:17:
Klopt het dat jouw tree is gebaseerd op:

http://webfx.eae.net/dhtml/xloadtree/implementation.html

Want deze lijkt me makkelijker, ook om aan te passen omdat allerlei features als add, remove en het verplaatsen er niet in zitten?
Niet gebaseerd op wel een resultaat van ervaring met zijn treeview. Ik heb hem dus ook helaas van de grond af gebouwd, ik had destijds liever eentje gemodificeerd. Erik heeft pas een nieuwe versie uitgebracht, maar de oude versie die ik destijds van hem gebruikte zat boordevol bugs en Erik zat in een drukke periode met bindows waardoor hij geen tijd had voor bugfixes. Door een bepaalde aanpak in zijn code, die wel de snelste methode is om iets op het canvas te tekenen, wordt een IE bug getriggerd waardoor de browser blijft hangen. Voor de rest had hij geen functies voor uitgebreide selectie van paden en gebruikte hij focus() om nodes te selecteren welke resulteerde in meerdere geselecteerde nodes bij het gebruik van iframes. Ik weet niet in hoeverre de bugs in de nieuwe versie terugkomen maar dan moet je hem even mailen.

In principe zitten al zijn methodes ook in die van mij, alleen had ik alles nog niet gedocumenteerd. Dus je kunt gewoon add, remove, etc. uitvoeren.

Je kunt in mijn versie zelf methods toevoegen door over te erven van "treeview" en "treenode". Ik heb hem daar dus ook echt op gebouwd, als top prio uitbreidbaarheid. Maar ik zou niet weten wat je extra zou willen hebben, ik heb hem echt volgestampt met methods.

[ Voor 40% gewijzigd door Verwijderd op 20-01-2005 18:54 ]


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

Voor een hele dikke treeview met duizenden items is on demand laden met xmlHttp natuurlijk de enige manier. Wachten op het laden van een node kan nooit echt lang duren, ik vermoed zelfs dat veel implementaties er met opzet een extra vertraging inbouwen om maar even een zandlopertje te kunnen laten zien :P En ik "wacht" ook liever bij elke klik 1/10s dan 1 keer 10s eigenlijk ;)

Verder is dat ueberhaupt leuk om even bij stil te staan; wat kan je allemaal met xmlHttp doen in een interface (+ wat dom scripting) om reloads van een hele pagina te voorkomen, dat is namelijk ontzettend veel :) Zo stond er laatst op een van de grotere weblogs nog een link naar een kaart/zoom tool van Zwitserland met xmlHttp. ff zoeken welke site het was, maar die waren er iig eindelijk achter gekomen dat het handig was. Voor wie er nog niet bekend mee was zou xmlHttp DE trend van 2005 worden ;)

edit:
...


Het was Mezzoblue, over deze link.

[ Voor 8% gewijzigd door Clay op 21-01-2005 09:25 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Clay schreef op vrijdag 21 januari 2005 @ 09:21:
Zo stond er laatst op een van de grotere weblogs nog een link naar een kaart/zoom tool van Zwitserland met xmlHttp. ff zoeken welke site het was, maar die waren er iig eindelijk achter gekomen dat het handig was. Voor wie er nog niet bekend mee was zou xmlHttp DE trend van 2005 worden ;)

edit:
...


Het was Mezzoblue, over deze link.
behalve dan dat ze hier geen xmlhttp gebruiken :P
Just before the weekend, I wrote about a Swiss mapping service called map.search.ch (which, incidentally, does not use XMLHttpRequest after all if you didn’t catch the update).

  • Reinier
  • Registratie: Februari 2000
  • Nu online

Reinier

\o/

Hoe zit het met die drag & drop functie? Als ik alle nodes naar de top node sleep hou ik uiteindelijk een lege tree over :? lijkt me niet de bedoeling, toch?

Verwijderd

Reinier schreef op vrijdag 21 januari 2005 @ 10:33:
[...]

Hoe zit het met die drag & drop functie? Als ik alle nodes naar de top node sleep hou ik uiteindelijk een lege tree over :? lijkt me niet de bedoeling, toch?
Daar ben je in principe helemaal vrij in. In mijn geval voer ik serverside een move uit in de database voor die node, ik moet immers serverside parentid's veranderen. Wat ik dus doe is drag n drop van een node, de draggingNode mag dan verwijderd worden, en de node waarna je toe sleept ga ik reloaden omdat ik ook nog extra informatie heb in mijn xml bestand over het soort object. Je kunt dus ook per treeview en eigen handler eraan hangen als je dit wilt, zodat je per treeview op een andere manier de drag n drop afhandelt.

Ik doe dus als volgt:

begin het draggen van een node:
function onNodeDragStart(draggingNode){
if(draggingNode.isRoot()){
// make sure the drag is cancelled before anything else
draggingNode.treeview.cancelDrag();
alert('Root mag niet gedragged worden');
return false;
}
return true;
}

Waarmee ik dus een referentie krijg naar de draggingNode als attribute, en vervolgens controleer ik of de node niet de root node is, die wil ik niet draggen nl. en vervolgens return ik een true of false die aangeeft of ik de node wel of niet mag gaan draggen.

Zodra ik de draggingNode ergens in dump:

function onNodeDragEnd(targetNode){
//instance,oldparent,newparent
var instance = draggingNode.getXMLAttribute('instanceid');
var oldparent = draggingNode.getXMLAttribute('parentid');
var newparent = targetNode.getXMLAttribute('instanceid');

/*
if(targetNode.getXMLAttribute('objectname').toLowerCase() == 'article'){
alert('An article cannot contain subitems');
return;
}

if(newparent == instance){
alert('object cannot be moved to itself');
return;
}
*/

// we set the true parameter here, because if we wouldn't do this, the parentNode of the selectedNode
// would be selected, and thus the targetNode would be overwritten with the parentNode

draggingNode.remove(true);
//moveInstance(instance,oldparent,newparent);
}

de variabelen instance, oldparent en newparent,objectname heb ik serverside in het xml bestand bij de node geplaatst. Deze haal ik dus op met draggingNode.getXMLAttribute(een xml attribuut); en daarna controleer ik of er in mijn geval mag worden doorgegaan met het moven van de node. Ik mag bijvoorbeeld niet in een artikel iets draggen.

Vervolgens wordt draggingNode.remove(true); uitgevoerd, die de te draggen node uit de treeview verwijderd. De true attribute voorkomt dat er na het verwijderen automatisch een parentNode wordt geselecteerd, want dan wordt ook de targetNode op die parentNode gezet.

en vervolgens voer ik mijn eigen moveInstance functie uit, die serverside de boel verplaatst.

Je bent er in principe helemaal vrij in. Er zitten een aantal handlers in die worden uitgevoerd bij drag n drop, waarmee je dus ook voortijdig drag n drop zou kunnen afbreken. Je krijgt dan de beschikking over een draggingNode (referentie naar de node die je dragged) en een targetNode (referentie naar de node die je draggingNode ontvangt op het moment dat je deze dumpt).

Je krijgt de beschikking over bouwstenen waarmee je snel functionaliteit uitvoert. Ik zou ook niet weten wat je moet doen met het direct verplaatsen van de node. Het zou meer nadelen dan voordelen opleveren, immers je moet aan iets op de server doorgeven dat je hebt verplaatst, en zodra je dat hebt gedaan kan er ook iets aan de andere childs op dat niveau zijn veranderd mbt order etc.

De handlers kun je definieren op de treeview, als je ze niet definieert worden de default handlers, gedefinieerd in core.js bovenin uitgevoerd, en deze doen dus niets.

var mytreeview = new treeview('mijn treeview',document.getElementById('treeviewwrap'),'tree.xml');
mytreeview.onNodeSelectEventHandler = onNodeSelect;
mytreeview.onNodeDragStartHandler = onNodeDragStart;
mytreeview.onNodeDragEndHandler = onNodeDragEnd;

nb: als je een node over een dichtgeklapte node sleept, zal de dichtgeklapte node na ong. 1 seconde automatisch uitklappen.

Ik had voor de rest ook wel wat aandacht besteed aan vriendelijke error messages. Als je dus een node selecteerd met index 7 maar er zijn er maximaal 5, dan krijg je dus een nette melding. Er is niets irritanters bij de ontwikkeling van web applicaties dat je js errors krijgt als je dit soort fouten maakt.

[ Voor 18% gewijzigd door Verwijderd op 21-01-2005 13:30 ]


Verwijderd

Topicstarter
Heb je toevallig ook wat uitgebreidere documentatie van de tree? Ik snap het wel, echter moet ik twee stagieres begeleiden hem te implementeren en zijn hebben wel wat docs nodig.

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 12:25:
Heb je toevallig ook wat uitgebreidere documentatie van de tree? Ik snap het wel, echter moet ik twee stagieres begeleiden hem te implementeren en zijn hebben wel wat docs nodig.
Wat voor soort documentatie denk je aan? De voorbeelden demonstreren al exact hoe je op een simpele manier gebruik maakt van de functionaliteit.

[ Voor 33% gewijzigd door Verwijderd op 22-01-2005 14:22 ]

Pagina: 1