Pertemuan 5 Activity 1
(Data Binding)
Jawab:
Data binding adalah konsep dalam pengembangan perangkat lunak yang
menghubungkan data dari lapisan model atau logika aplikasi dengan
elemen antarmuka pengguna (UI). Tujuannya adalah untuk memastikan
bahwa data yang ditampilkan di UI selalu konsisten dengan data yang
ada di lapisan model. Data binding dapat berjalan satu arah (model ke
UI atau sebaliknya) atau dua arah (model ke UI dan sebaliknya)
tergantung pada implementasinya. Hal ini meningkatkan efisiensi dan
kejelasan dalam pengembangan aplikasi dengan mengurangi perluasan kode
yang kompleks untuk memanipulasi tampilan secara manual.
Langkah 1
Persiapkan folder project pada C:\golang\src\ atau pada GOPATH yang
sudah kalian buat pada saat installasi. Setelah itu buatlah folder baru
untuk menaruh project kalian.
Langkah 2
Buat file baru di dalam folder act5 lalu beri nama main.go. Setelah itu
masukan kode program main.go
package main
import (
"database/sql"
"html/template"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
func main() {
log.Println("Server started on: http://localhost:8080") //Ganti 2 digit akhir port dengan 2 digit
akhir NPM anda
http.HandleFunc("/", Index)
http.HandleFunc("/show", Show)
http.HandleFunc("/new", New)
http.HandleFunc("/edit", Edit)
http.HandleFunc("/insert", Insert)
http.HandleFunc("/update", Update)
http.HandleFunc("/delete", Delete)
http.ListenAndServe(":8080", nil) //Ganti 2 digit akhir port dengan 2 digit akhir NPM anda
}
Langkah 3
Setelah membuat dan menyelesaikan kode program main.go,
selanjutnya adalah membuat folder form di dalam direktori
C:\golang\src\act5 atau direktori project kalian. Dalam folder form
buatlah file baru dengan nama:
index.html, header.html, footer.html, show.html, menu.html, new.html,
edit.html
Berikut adalah struktur folder setelah kalian membuat folder form dan
file html di atas.
header.html
{{ define "Header" }}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Employee Management System</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
rel="stylesheet">
<script
src="https://cdn.jsdelivr.net/npm/sweetalert2@11.7.18/dist/sweetalert2.all.min.js"></scri
pt>
<link href="https://cdn.jsdelivr.net/npm/sweetalert2@11.7.18/dist/sweetalert2.min.css"
rel="stylesheet">
<link rel="stylesheet" href="/form/styles.css">
</head>
<body class="bg-light">
{{ end }}
index.html
{{ define "Index" }}
{{ template "Header" }}
{{ template "Menu" }}
<script>
function confirmDeletion(idStr) {
var id = parseInt(idStr, 10); // convert string back to number
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
window.location.href = "/delete?id=" + id;
}
})
}
</script>
<div class="container mt-4">
<h2 class="text-center">Registered Employees</h2>
<table class="table table-striped mt-4">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>City</th>
<th colspan="3">Actions</th>
</tr>
</thead>
<tbody>
{{ range . }}
<tr>
<td>{{ .Id }}</td>
<td>{{ .Name }}</td>
<td>{{ .City }}</td>
<td>
<div class="btn-group" role="group">
<a href="/show?id={{ .Id }}" class="btn btn-info">View</a>
<a href="/edit?id={{ .Id }}" class="btn btn-warning">Edit</a>
<button onclick="confirmDeletion('{{ .Id }}')" class="btn btn-
danger">Delete</button>
</div>
</td>
</tr>
{{ end }}
</tbody>
</table>
</div>
{{ template "Footer" }}
{{ end }}
show.html
<!-- ./form/show.html -->
{{ define "Show" }}
{{ template "Header" }}
{{ template "Menu" }}
<div class="container mt-4">
<h2 class="text-center">Employee Details</h2>
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Name: {{ .Name }}</h5>
<p class="card-text">City: {{ .City }}</p>
</div>
</div>
</div>
{{ template "Footer" }}
{{ end }}
new.html
{{ define "New" }}
{{ template "Header" }}
{{ template "Menu" }}
<div class="container">
<h2 class="text-center">New Employee</h2>
<form method="POST" action="insert">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" id="name"/>
</div>
<div class="form-group">
<label for="city">City</label>
<input type="text" class="form-control" name="city" id="city"/>
</div>
<input type="submit" class="btn btn-primary" value="Create Employee" />
</form>
</div>
{{ template "Footer" }}
{{ end }}
edit.html
{{ define "Edit" }}
{{ template "Header" }}
{{ template "Menu" }}
<div class="container">
<h2 class="text-center">Edit Employee</h2>
<form method="POST" action="update">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" id="name"
value="{{ .Name }}" />
</div>
<div class="form-group">
<label for="city">City</label>
<input type="text" class="form-control" name="city" id="city" value="{{
.City }}" />
</div>
<input type="hidden" name="uid" value="{{ .Id }}" />
<input type="submit" class="btn btn-primary" value="Update Employee" />
</form>
</div>
{{ template "Footer" }}
{{ end }}
menu.html
<!-- ./form/menu.html -->
{{ define "Menu" }}
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<a class="navbar-brand" href="/">Employee Management System</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-
target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-
label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/new">Add Employee</a>
</li>
</ul>
</div>
</div>
</nav>
{{ end }}
footer.html
{{ define "Footer" }}
<footer class="footer py-3 bg-dark fixed-bottom">
<div class="container text-center">
<span class="text-white">Employee Management System - 2023</span>
</div>
</footer>
</body>
</html>
{{ end }}
style.css
body {
min-height: 75rem;
padding-top: 4.5rem;
}
.btn-group .btn {
margin-right: 5px;
}
Jika kode program main.go dan template pada folder form tidak
terdapat error, maka jalankan program dengan perintah berikut: go
run main.go
Setelah itu buka http://localhost:(4 digit terakhir npm kalian), maka
akan tampil output seperti gambar di bawah: