window.onload = function() {
var viewModel = function() {
var that = this;
that.employees = ko.observableArray(employees);
that.employee = ko.observable({});
that.visiblePopup = ko.observable(false);
that.popupOptions = {
width: 300,
height: 250,
contentTemplate: "info",
showTitle: true,
title: "Information",
visible: that.visiblePopup,
dragEnabled: false,
closeOnOutsideClick: true
};
that.showInfo = function (data) {
that.employee(data.model);
that.visiblePopup(true);
};
};
ko.applyBindings(new viewModel(), document.getElementById("container"));
};
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.6/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.6/css/dx.light.css" />
<script src="https://cdn3.devexpress.com/jslib/20.2.6/js/dx.all.js"></script>
<script src="data.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="index.js"></script>
</head>
<body class="dx-viewport">
<div class="demo-container">
<div id="container">
<h1>Employees</h1>
<ul data-bind="foreach: employees">
<li>
<img data-bind="attr: { src: $data.Picture }" /><br/>
<i data-bind="text: $data.FirstName"></i>
<i data-bind="text: $data.LastName"></i><br/>
<div class="button-info" data-bind="dxButton: {
text: 'Details',
onClick: $parent.showInfo
}"></div>
</li>
</ul>
<div data-bind="with: employee">
<div data-bind="dxPopup: $parent.popupOptions">
<div data-options="dxTemplate: { name:'info' }">
<p>
Full Name:
<span data-bind="text: $data.FirstName"></span>
<span data-bind="text: $data.LastName"></span>
</p>
<p>
Birth Date:
<span data-bind="text: $data.BirthDate"></span>
</p>
<p>
Address:
<span data-bind="text: $data.Address"></span>
</p>
<p>
Hire Date:
<span data-bind="text: $data.HireDate"></span>
</p>
<p>
Position:
<span data-bind="text: $data.Position"></span>
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
#container {
padding: 10px;
}
#container ul {
list-style-type: none;
text-align: center;
font-size: 0;
}
#container ul li {
display: inline-block;
width: 160px;
margin: 10px;
font-size: 14px;
}
#container ul li img{
width: 100px;
}
.button-info {
margin: 10px;
}
.dx-popup-content p {
margin-bottom: 10px;
margin-top: 0;
}
var employees = [{
"ID": 7,
"FirstName": "Sandra",
"LastName": "Johnson",
"Prefix": "Mrs.",
"Position": "Controller",
"Picture": "../../../../images/employees/06.png",
"BirthDate": "1974/11/15",
"HireDate": "2005/05/11",
"Notes": "Sandra is a CPA and has been our controller since 2008. She loves to interact with staff so if you've not met her, be certain to say hi.\r\n\r\nSandra has 2 daughters both of whom are accomplished gymnasts.",
"Address": "4600 N Virginia Rd."
}, {
"ID": 10,
"FirstName": "Kevin",
"LastName": "Carter",
"Prefix": "Mr.",
"Position": "Shipping Manager",
"Picture": "../../../../images/employees/07.png",
"BirthDate": "1978/01/09",
"HireDate": "2009/08/11",
"Notes": "Kevin is our hard-working shipping manager and has been helping that department work like clockwork for 18 months.\r\n\r\nWhen not in the office, he is usually on the basketball court playing pick-up games.",
"Address": "424 N Main St."
}, {
"ID": 11,
"FirstName": "Cynthia",
"LastName": "Stanwick",
"Prefix": "Ms.",
"Position": "HR Assistant",
"Picture": "../../../../images/employees/08.png",
"BirthDate": "1985/06/05",
"HireDate": "2008/03/24",
"Notes": "Cindy joined us in 2008 and has been in the HR department for 2 years. \r\n\r\nShe was recently awarded employee of the month. Way to go Cindy!",
"Address": "2211 Bonita Dr."
}, {
"ID": 30,
"FirstName": "Kent",
"LastName": "Samuelson",
"Prefix": "Dr.",
"Position": "Ombudsman",
"Picture": "../../../../images/employees/02.png",
"BirthDate": "1972/09/11",
"HireDate": "2009/04/22",
"Notes": "As our ombudsman, Kent is on the front-lines solving customer problems and helping our partners address issues out in the field. He is a classically trained musician and is a member of the Chamber Orchestra.",
"Address": "12100 Mora Dr"
}];