In the previous chapter we discussed various ways we can add a ToolTip to the Grid Cells and buttons in the Toolbar. Here is the complete source code for the tutorial...
Application starting point index.html
<html>
<head>
<title>ExtJs 4 ToolTip Tutorial</title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<script type="text/javascript" src="extjs/ext-all-debug.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body></body>
</html>
Application JavaScript file app.js
Ext.Loader.setConfig({
enabled: true
});
Ext.require([
'Ext.tip.*',
'Ext.Button'
]);
Ext.application({
name: 'CN',
appFolder: 'app',
controllers: [
'Countries'
],
launch: function() {
Ext.create('Ext.container.Viewport', {
items: [
{
xtype: 'countryList',
}
]
});
}
});
JavaScript source file for the model Country.js
Ext.define('CN.model.Country', {
extend: 'Ext.data.Model',
fields: [
'code',
'name',
'continent',
'region',
'lifeExpectancy',
'gnp'
]
});
JavaScript source file for the Store Countries.js
Ext.define('CN.store.Countries', {
extend: 'Ext.data.Store',
model: 'CN.model.Country',
autoLoad: true,
pageSize: 15,
proxy: {
type: 'ajax',
url: 'CountryServlet',
reader: {
type: 'json',
totalProperty: 'totalCount',
root: 'countries',
successProperty: 'success'
},
}
});
JavaScript source file for the Grid View CountryList.js
Ext.define('CN.view.CountryList' ,{
extend: 'Ext.grid.Panel',
alias : 'widget.countryList',
title : 'List of Countries',
store : 'Countries',
loadMask: true,
height: 400,
width: 700,
dockedItems: [{
xtype: 'pagingtoolbar',
dock: 'bottom',
displayInfo: true,
store: 'Countries',
items: [
{
xtype: 'tbseparator'
},
{
id : 'myTip1',
xtype : 'button',
text: 'ToolTip Example 1',
tooltip: 'Tool Tip added in the View definition ...'
},
{
id : 'myTip2',
xtype : 'button',
text: 'ToolTip Example 2',
}
]
}],
initComponent: function() {
this.columns = [{
header: 'Country Code',
dataIndex: 'code',
flex: 1,
renderer : function(value, metadata, record) {
myToolTipText = "<b>Tool Tip added using renderer function for country</b>";
myToolTipText = myToolTipText + "<br/>Code: "+ record.get('name');
myToolTipText = myToolTipText + "<br/>Name: "+ record.get('name');
myToolTipText = myToolTipText + "<br/>Continent: "+ record.get('continent');
myToolTipText = myToolTipText + "<br/>Region: "+ record.get('region');
metadata.tdAttr = 'data-qtip="' + myToolTipText + '"';
return value;
}
},
{header: 'Name', dataIndex: 'name', flex: 3}
];
this.callParent(arguments);
}
});
JavaScript source file for the application controller Countries.js
Ext.define('CN.controller.Countries', {
extend : 'Ext.app.Controller',
//define the stores
stores : ['Countries'],
//define the models
models : ['Country'],
//define the views
views : ['CountryList'],
refs: [{
ref: 'myGrid',
selector: 'grid'
}],
init : function() {
this.control({
'viewport > panel' : {
render : this.onPanelRendered
},
'countryList' : {
render : this.onGridRendered
},
'countryList button[id=myTip2]' : {
render : this.onButtonRendered
}
});
},
onPanelRendered : function() {
//just a console log to show when the panel is rendered
console.log('The panel was rendered');
},
onGridRendered : function(gridView) {
console.log('Grid panel was just rendered');
//create the ToolTip
gridView.tip = Ext.create('Ext.tip.ToolTip', {
// The overall target element.
target: gridView.el,
// Each grid row causes its own seperate show and hide.
delegate: gridView.view.cellSelector,
// Moving within the row should not hide the tip.
trackMouse: true,
// 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) {
gridColums = gridView.view.getGridColumns();
column = gridColums[tip.triggerElement.cellIndex];
//only display the tool tip for name column
if(column.dataIndex === 'name'){
record = gridView.view.getRecord(tip.triggerElement.parentNode);
myToolTipText = "<b>Tool Tip for country added from the controller</b>";
myToolTipText = myToolTipText + "<br/>Code: "+ record.get('name');
myToolTipText = myToolTipText + "<br/>Name: "+ record.get('name');
myToolTipText = myToolTipText + "<br/>Continent: "+ record.get('continent');
myToolTipText = myToolTipText + "<br/>Region: "+ record.get('region');
tip.update(myToolTipText);
}
else {
return false;
}
}
}
});
},
onButtonRendered : function() {
console.log('The ToolTip Button was rendered');
//create the ToolTip
Ext.create('Ext.tip.ToolTip', {
target: 'myTip2',
html: 'Tool Tip added later from the app controller ...'
});
}
});

No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.