I know this was a long time ago. Here is another solution that works in ExtJs 7.6.0:
var treeList = Ext.create({
xtype: 'treelist',
store: {
root: {
id: 1,
expanded: true,
children: [{
id: 2,
text: 'detention',
leaf: true,
iconCls: 'x-fa fa-frown-o',
qtitle: 'Detention qtip',
qtip: 'Detention qtip'
}, {
id: 3,
text: '<span title="Homework qtip">Homework</span>',
expanded: true,
iconCls: 'x-fa fa-folder',
qtitle: 'Homework qtip',
children: [{
id: 4,
text: '<span title="Book Report qtip">Book Report</span>',
leaf: true,
iconCls: 'x-fa fa-book',
qtip: 'book report qtip'
}, {
id: 5,
text: 'algebra',
leaf: true,
iconCls: 'x-fa fa-graduation-cap',
qtip: 'algebra qtip'
}]
}, {
id: 6,
text: 'buy lottery tickets',
leaf: true,
iconCls: 'x-fa fa-usd',
qtip: 'buy lottery tickets qtip'
}]
}
},
renderTo: Ext.getBody()
});
var tip = Ext.create('Ext.tip.ToolTip', {
// The overall target element.
target: treeList.el,
// Each grid row causes its own separate show and hide.
delegate: '.x-treelist-row-over',
// Moving within the row should not hide the tip.
trackMouse: false,
// Render immediately so that tip.body can be referenced prior to the first show.
renderTo: Ext.getBody(),
listeners: {
// Change content dynamically depending on which element triggered the show.
beforeshow: function updateTipBody(tip) {
//debugger;
function getParentElem(elem) {
if (!elem) {
return null;
} else if (elem.getAttribute('data-recordid')) {
return elem;
} else {
return getParentElem(elem.parentNode);
}
}
//debugger;
var elem = getParentElem(tip.triggerElement);
if (!elem) {
return;
}
var store = treeList.getStore();
var dataRecordId = elem.getAttribute("data-recordid");
console.log(`dataRecordId = ${dataRecordId}`);
var internalId = parseInt(dataRecordId);
console.log(`Internal id = ${internalId}`);
var node = store.getByInternalId(internalId);
var qtip = node.data.text;
if (node.data.qtip)
qtip = node.data.qtip;
//console.log(node.data.qtip);
tip.update(qtip);
//debugger;
// debugger;
},
}
});
https://fiddle.sencha.com/#view/editor&fiddle/3n2r
Weirdly enough, the icons for the Neptune, Crisp themes are broken - not sure why.