2006-11-18

mx:Tree addNode/removeNode 2



Eu deveria ter postado isso como comentário do post anterior de mesmo titulo, mas ficou um pouco longo para ficar como comentário.
Então ai vai o script completo.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init();"
viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.treeClasses.TreeListData;
import mx.events.TreeEvent;
import mx.controls.Alert;
import mx.collections.XMLListCollection;
import mx.utils.ObjectUtil;
[]
private var dbTree:XML;
private function init():void
{
dbTree =
<node label="root" data="data">
<node label="label 0" data="data" />
<node label="label 1" data="data" />
</node>;
}
private function addNodeAt(e:Event):void
{
if(arvore.selectedItem != null){
var i:Number = (arvore.selectedItem as XML).children().length();
var n:XML = XML("<node label='label "+i+
"' data='data' />");
arvore.selectedItem.item = n;
//arvore.selectedItem = null;
arvore.validateNow();
}else{
Alert.show("Selecione um item","Error");
}
}

private function removeNode(e:Event):void
{
if(arvore.selectedItem != null){
try{
var target:XML = arvore.getParentItem(arvore.selectedItem);
delete target.node[arvore.selectedItem.childIndex()];
} catch(e:Error){
for(var i:String in arvore.dataProvider){
if(arvore.dataProvider[i].@label==arvore.selectedItem.@label){
arvore.dataProvider.removeItemAt(i);
break;
}
}
}
arvore.selectedItem = null;
arvore.validateNow();
}else{
Alert.show("Selecione um item","Error");
}
}
]]>
</mx:Script>
<mx:Tree
width="300"
height="300"
id="arvore"
labelField="@label"
dataProvider="{dbTree.children()}"
openDuration="0"
></mx:Tree>
<mx:Button id="addNode" y="310" width="80"
label="addNode" click="addNodeAt(event)" />
<mx:Button id="delNode" y="310" x="90" width="80"
label="delNode" click="removeNode(event)" />
</mx:Application>

2 comentários:

Renan Fretta disse...

Como fazer para alterar o node selecionado

Anônimo disse...

Dá uma olhada no código, pois tá dando um problema para remover um node, pois ele apaga o nodo seguinte ao selecionado, para ver o problema é só adcionar vários nodes e selecionar o último e tentar apagar. Consertei colocando um "i+1" em:

if(arvore.dataProvider[i].@label==arvore.selectedItem.@label){
arvore.dataProvider.removeItemAt(i+1);
break;
}