Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: Wartość gałęzi w drzewie

Szukam, szukam i nic.
Mam drzewo i muszę mieć listener, który wyświetli przechwyconą wartość parametru dla zaznaczonej (klikniętej) gałęzi. Help...
Drzewo

new Ext.tree.TreePanel({
loader:new Ext.tree.TreeLoader(),
anchor: '90%',
autoScroll:true,
id:'tree2',
name:'category',
bodyStyle:'background:white;',
root:new Ext.tree.AsyncTreeNode({
expanded:true,
leaf:false,
text:'Root',
animCollapse:true,
animate:true,
children:[{
text:'First',
leaf:true,
id:'1'
},{
text:'Second',
leaf:true,
id:'2'
}]
}),listeners: {
click: function(){
var node = Ext.getCmp('tree2').getValue();
alert(node);
}
}
})


i nic.

Z kolei dla

var node = Ext.getCmp('tree2').getSelectionModel().getSelectedNode();


mam jakieś dziwne wartości, typu

Node ynode-431

konto usunięte

Temat: Wartość gałęzi w drzewie

Grzegorz Koronowski:

var tree = new Ext.tree.TreePanel({
loader:new Ext.tree.TreeLoader(),
anchor: '90%',
autoScroll:true,
id:'tree2',
name:'category',
bodyStyle:'background:white;',
root:new Ext.tree.AsyncTreeNode({
expanded:true,
leaf:false,
text:'Root',
animCollapse:true,
animate:true,
children:[{
text:'First',
leaf:true,
id:'1'
},{
text:'Second',
leaf:true,
id:'2'
}]
}),listeners: {
click: {
fn: function(n, e){
alert(n);
},
scope: tree // TO JEST OBIEKT DO KTOREGO MOZESZ SIE ODWOLAC POPRZEZ this w HANDLERZE!
}
}
})


Moglem pominac jakies nawiasy. Textarea nie jest moim ulubionym edytorem JS :) Generalnie jak stoi w dokumentacji event click dla tree panel przekazuje node oraz event obiekt - nie trzeba go szukac. Nie powinienes rowniez w handlerze poszukiwac obiektu po id, bo jak bedziesz chcial dodac kilka identycznych drzew to musisz duplikowac kod.
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: Wartość gałęzi w drzewie

Rafał Ziółkowski:
Moglem pominac jakies nawiasy. Textarea nie jest moim ulubionym edytorem JS :) Generalnie jak stoi w dokumentacji event click dla tree panel przekazuje node oraz event obiekt - nie trzeba go szukac. Nie powinienes rowniez w handlerze poszukiwac obiektu po id, bo jak bedziesz chcial dodac kilka identycznych drzew to musisz duplikowac kod.

You are my hero :)

Zrobiłem tak:

new Ext.tree.TreePanel({

loader:new Ext.tree.TreeLoader(),

anchor: '90%',

autoScroll:true,

id:'tree2',

name:'category',

bodyStyle:'background:white;',

root:new Ext.tree.AsyncTreeNode({

expanded:true,

leaf:false,

text:'Root',

animCollapse:true,

animate:true,
id:'0',
children:[{
text:'First',
leaf:false,
id:'1',
children:[{
text:'Sub 1.1',
id:'100' // <- dla testów
}]
},{
text:'Second',
leaf:true,
id:'2'
}]

}),listeners: {

click: {

fn: function(node, event){

alert(node.id);

},

}

}

})



Nie wiem tylko po co ten "scope" ?
Co by było gdybym miał dwa takie drzewa w formularzu (o innym id) ?
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: Wartość gałęzi w drzewie

Rafał Ziółkowski:
szukac. Nie powinienes rowniez w handlerze poszukiwac obiektu po id,

Chodziło mi o id znajdujące się w atrybutach dziecka, obok text.

konto usunięte

Temat: Wartość gałęzi w drzewie

Grzegorz Koronowski:
Rafał Ziółkowski:
szukac. Nie powinienes rowniez w handlerze poszukiwac obiektu po id,

Chodziło mi o id znajdujące się w atrybutach dziecka, obok text.

Tak, ale w handlerze do noda odwolujesz sie poprzez parametr. Podajac scope, podajesz kontekst w jakim ma byc wykonany handler. Teraz wybraz sobie sytuacje kiedy stworzyles klase drzewa zasilanego zewnetrznymi danymi, jezeli w handlreach bedziesz sie odwolywal bezposrednio do componentu, to zeby zrobic drugie takie drzewo bedziesz musial zduplikowac caly kod (bad design), a jezeli zrobisz to "anonimowo" to wystarczy ze zrobisz, np:

var tree3 = new MoreTree({url: moje_dane_url});


I nie musisz nic duplikowac, to bardziej kwestie projektowe.

Powiedzmy ze mam aspiracje zeby siac w ludziach potrzebe korzystania z dobrych wzorcow projektowych :)

Następna dyskusja:

Wartość w Combobox




Wyślij zaproszenie do