Templates in EJ2 JavaScript Mention control
2 May 202312 minutes to read
The Mention has been provided with several options to customize each suggestion list item, display item, and data loading indication.
Item template
The content of each list item in the Mention can be customized using the itemTemplate property.
In the following sample, each list item is split into two columns to display relevant data using itemTemplate
.
//initiates the component
var mentionObject = new ej.dropdowns.Mention({
//bind the data manager instance to dataSource property
dataSource: new ej.data.DataManager({
url: 'https://services.odata.org/V4/Northwind/Northwind.svc/',
adaptor: new ej.data.ODataV4Adaptor(),
crossDomain: true
}),
//bind the Query instance to query property
query: new ej.data.Query().from('Employees').select(['FirstName', 'City','EmployeeID']).take(6),
//map the appropriate columns to fields property
fields: { value: 'FirstName' },
//set width to popup list
popupWidth: '200px',
//sort the resulted items
sortOrder: 'Ascending',
//set the value to itemTemplate property
itemTemplate: "<span><span class='name'>${FirstName}</span><span class ='city'>${City}</span></span>"
});
//render the component
mentionObject.appendTo('#mentionElement');
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 DropDownList</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="styles.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-dropdowns/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.2.4/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container" style="width:200px;">
<label style="font-size: 15px; font-weight: 600;">Comments</label>
<!--element which is the Mention target to list the suggestions-->
<div id="mentionElement" style="min-height: 100px; border: 1px solid #D7D7D7; border-radius: 4px; padding: 8px; font-size: 14px; width: 600px;"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Display template
You can customize the mentioned value’s display appearance using the displayTemplate property.
In the following sample, the selected value is displayed as a combined text of both FirstName
and City
in the mention element, which is separated by a hyphen.
//initiates the component
var mentionObject = new ej.dropdowns.Mention({
//bind the data manager instance to dataSource property
dataSource: new ej.data.DataManager({
url: 'https://services.odata.org/V4/Northwind/Northwind.svc/',
adaptor: new ej.data.ODataV4Adaptor(),
crossDomain: true
}),
//bind the Query instance to query property
query: new ej.data.Query().from('Employees').select(['FirstName', 'City','EmployeeID']).take(6),
//map the appropriate columns to fields property
fields: { value: 'FirstName' },
//sort the resulted items
sortOrder: 'Ascending',
//set width to popup list
popupWidth: '200px',
//set the value to itemTemplate property
itemTemplate: "<span><span class='name'>${FirstName}</span><span class ='city'>${City}</span></span>",
//set the value to displayTemplate property
displayTemplate:"<span>${FirstName} - ${City}</span>"
});
//render the component
mentionObject.appendTo('#mentionElement');
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 DropDownList</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="styles.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-dropdowns/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.2.4/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container" style="width:200px;">
<label style="font-size: 15px; font-weight: 600;">Comments</label>
<!--element which is the Mention target to list the suggestions-->
<div id="mentionElement" style="min-height: 100px; border: 1px solid #D7D7D7; border-radius: 4px; padding: 8px; font-size: 14px; width: 600px;"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
No records template
You can show the custom design of the popup list content when no data and matches are found on the search with the help of noRecordsTemplate property.
//initiates the component
var mentionObject = new ej.dropdowns.Mention({
//bind the data manager instance to dataSource property
dataSource: [],
//set the value to noRecords template
noRecordsTemplate:"<span class='norecord'> NO DATA AVAILABLE</span>"
});
//render the component
mentionObject.appendTo('#mentionElement');
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 DropDownList</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="styles.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-dropdowns/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.2.4/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container" style="width:200px;">
<label style="font-size: 15px; font-weight: 600;">Comments</label>
<!--element which is the Mention target to list the suggestions-->
<div id="mentionElement" style="min-height: 100px; border: 1px solid #D7D7D7; border-radius: 4px; padding: 8px; font-size: 14px; width: 600px;"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Spinner template
Display the customized waiting spinner, when data fetching takes time to load in the suggestion list by using the spinnerTemplate property.
//initiates the component
var mentionObject = new ej.dropdowns.Mention({
//bind the data manager instance to dataSource property
dataSource: new ej.data.DataManager({
url: 'https://services.odata.org/V4/Northwind/Northwind.svc/',
adaptor: new ej.data.ODataV4Adaptor(),
crossDomain: true
}),
//bind the Query instance to query property
query: new ej.data.Query().from('Employees').select(['FirstName', 'City','EmployeeID']).take(26),
//map the appropriate columns to fields property
fields: { value: 'FirstName' },
//set width to popup list
popupWidth: '200px',
//sort the resulted items
sortOrder: 'Ascending',
spinnerTemplate: '<div class="spinner_loader"></div>'
});
//render the component
mentionObject.appendTo('#mentionElement');
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 DropDownList</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="styles.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-dropdowns/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.2.4/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container" style="width:200px;">
<label style="font-size: 15px; font-weight: 600;">Comments</label>
<!--element which is the Mention target to list the suggestions-->
<div id="mentionElement" style="min-height: 100px; border: 1px solid #D7D7D7; border-radius: 4px; padding: 8px; font-size: 14px; width: 600px;"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>