A. Pengertian
SammyJS adalah sebuah framework Javascript yang menggunakan design-pattern Model-
View-Controller. Backbone diciptakan untuk mengatasi kerumitan dalam membangun sebuah thick
web application (aplikasi web dengan business logic yang cukup padat). Backbone memiliki kelebihan
sebagai berikut :
• Memisahkan logic dengan interaksi DOM.
• Mengabstraksi koneksi client ke database menggunakan AJAX.
• Mempermudah representasi kepingan-kepingan html ke dalam sebuah object wrapper.
• Menjadi control flow sebuah single page web application.
• Bahkan, Backbone dapat dengan mudah mengabstraksi koneksi yang dibangun client
menggunakan websocket.
B. Persiapan
Untuk menggunakan framework BackboneJS, pastikan file backbone.js telah terunduh,
kemudian pada file HTML yang telah dibuat, tambahkan baris di bawah ini sebelum </head>.
untuk solusi template, backbone memiliki utility library bernama underscore.js, untuk mengunduhnya
dapat menuju url berikut : http://underscorejs.org/. Untuk memanggil javascript underscore,
tambahkan baris di bawah ini setelah kode di atas, tambahkan juga javascript jquery.
C. Start
C.1 Dasar HTML5 Template Backbone
Untuk memulai membuat aplikasi menggunakan Framework Backbone, dibutuhkan halaman
HTML5 untuk menampilkannya di Web Browser. Untuk Pertama, buatlah sebuah file html bernama
index.html.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Panduan Fluider</title>
</head>
<body>
<div id="container">Loading...</div>
<script type="text/javascript">
// Javascript kode
</script>
</body>
</html>
Aplikasi Backbone membutuhakan library seperti backbone.js, underscore.js dan jquery.js, untuk
memanggil library dapat melihat kodenya pada tahap “B.Persiapan”.
Untuk fungsi dari <div id=”container”> … </div> adalah untuk menampilkan semua fungsi aplikasi js
dari user atau developer aplikasi, untuk kode javascript dari user dapat di letakkan pada bagian <script
type=”text/javascript”> … </script>
Beberapa fitur yang menarik dari Backbone.View adalah kemudahan Backbone.View dalam
mengelola user-triggered event serta keluwesan penggunaan library javascript untuk manipulasi DOM
(jQuery atau Zepto).
<script type="text/javascript">
var AppView = Backbone.View .extend({
el: '#container',
initialize: function(){
this.render();
},
render: function(){
this.$el.html("Hello World");
}
});
Penjelasan :
el = singkatan dari element. Element di sini menghubungkan konten HTML dengan fungsi Javascript
Backbone.
Var appView = new AppView(); = digunakan untuk menginisialisasi tampilan pertama.
Dimana fungsi “templateString” menggunakan place holder “<%= %>” dan “<%- %>” untuk
menggantinya dengan data. Selain itu juga dapat menggunakan “<% %>” untuk menjalankan
javascript.
el: $('#container'),
Fungsi template di atas memiliki placeholder 'who' yang akan digunakan sebagai kata pengganti.
“this.$el.html(this.template({who: 'World!'}));”.
<section id="todoapp">
<header id="header">
<h1>Todos</h1>
<input id="new-todo" placeholder="Apa kegiatan kamu?">
</header>
<section id="main">
<ul id="todo-list"></ul>
</section>
</section>
2. Tambahkan fungsi javascript di bawah ini pada file html, kode javascript ini menggunakan
komponen Backbone.Model.
<script type="text/javascript">
var app = {}; // membuat namespace untuk app user
app.Todo = Backbone.Model.extend({
defaults: {
title: '',
completed: false
}
});
</script>
Setelah itu simpan konfigurasi tersebut, uji pada web browser, pilih web browser Chrome
kemudian tekan “Ctrl + Shift + I” untuk membuka Console, kemudian jalankan perintah di bawah ini
pada console tersebut.
> todo.get('title');
"Learn Backbone.js"
> todo.get('completed');
false
> todo.get('created_at');
undefined
> todo.set('created_at', Date());
child{cid:"c1",attributes:Object,_changing:false,_previousAttributes:Object,chan
ged:Object…}
> todo.get('created_at');
"Fri Apr 12 2013 16:35:08 GMT+0700 (WIT)"
Jika kode Backbone.Model tidak terbaca pada web browser, ketika mencoba kode di atas akan tampil
error di bawah ini.
3. Kemudian tambahkan kode javascript di bawah ini untuk membuat sebuah fungsi untuk
penyimpanan, letakkan di dalam kode <script> setelah kode “Backbone.Model” di atas.
app.TodoList = Backbone.Collection.extend({
model: app.Todo,
localStorage: new Store("backbone-todo")
});
Kode di atas menggunakan penyimpanan lokal HTML5, jadi yang diperlukan untuk mendefinisikan
penyimpanan adalah “localStorage” bukan “url”. Untuk membuat kode di atas berjalan, tambahkan
javascript backbone.localStorage-min.js pada index.html.
Untuk menguji kode tersebut, dapat menggunakan Console dari Google Chrome, gunakan perintah di
bawah ini.
undefined
> todoList.create({title: 'Learn Backbone\'s Collection'});
r{cid:"c1",attributes:Object,collection:r,_changing:false,_previousAttributes:Ob
ject…}
> var lmodel = new app.Todo({title: 'Learn Models', completed: true});
undefined
> todoList.add(lmodel);
r{length:2,models:Array[2],_byId:Object,constructor:function,model:function…}
> todoList.pluck('title');
["Learn Backbone's Collection", "Learn Models"]
> JSON.stringify(todoList);
"[{"title":"Learn Backbone's Collection","completed":false,"id":"03785394-30ab-
adb8-32c1-bd085457b175"},{"title":"Learn Models","completed":true}]"
4. Saatnya beralih ke Todo App, buatlah sebuah template untuk menampilkan fungsi model Object ke
dalam halaman, gunakan “item-template” pada id template dan “TodoView” untuk fungsi javascript.
app.TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#item-template').html()),
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
app.AppView = Backbone.View.extend({
el: '#todoapp',
initialize: function () {
this.input = this.$('#new-todo');
app.todoList.on('add', this.addAll, this);
app.todoList.on('reset', this.addAll, this);
app.todoList.fetch();
},
events: {
'keypress #new-todo': 'createTodoOnEnter'
},
createTodoOnEnter: function(e){
if ( e.which !== 13 || !this.input.val().trim() ) {
return;
}
app.todoList.create(this.newAttributes());
this.input.val('');
},
addOne: function(todo){
var view = new app.TodoView({model: todo});
$('#todo-list').append(view.render().el);
},
addAll: function(){
this.$('#todo-list').html('');
app.todoList.each(this.addOne, this);
},
newAttributes: function(){
return {
title: this.input.val().trim(),
completed: false
}
}
});
Kemudian uji pada web browser, jika berhasil maka ketika user memasukkan inputan berupa kegiatan,
akan muncul daftar list di bawah inputan.
1. Untuk fitur “Create” dan “Read” telah dibuat pada tahap sebelumnya, saatnya lanjut dengan
membuat fitur “Update”, fitur “Update” digunakan untuk memperbaiki kesalahan dalam pengetikan
atau inputan (masukkan) ke dalam Aplikasi.
Buatlah sebuah tampilan inputan pada halaman untuk fungsi edit, tambahkan ke dalam kode <script
type=”text/template” id=”item-template”>
Jika sudah, simpan konfigurasi html tersebut, kemudian tampilkan di web browser.
2. Pada tampilan di atas, fungsi edit berseberangan dengan list, untuk menyembunyikan fungsi edit
adpat menggunakan kode CSS di bawah ini, letakkan sebelum </head>.
<style>
#todoapp ul {
list-style-type: none;
}
#todo-list input.edit {
display: none;
}
#todo-list .editing label {
display: none;
}
#todo-list .editing input.edit {
display: inline;
}
</style>
Fungsi CSS di atas adalah menyembunyikan fungsi “Edit” dan menampilkannya ketika proses Editing.
3. Ubah template input untuk fungsi “checkbox” menjadi seperti kode di bawah ini.
app.Todo = Backbone.Model.extend({
defaults: {
title: '',
completed: false
},
toggle: function(){
this.save({ completed: !this.get('completed')});
}
});
5. Setelah itu dibutuhkan juga event pada TodoView untuk merespon perubahan. Ubah kode event
TodoView menjadi kode di bawah ini.
app.TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#item-template').html()),
render: function(){
this.$el.html(this.template(this.model.toJSON()));
this.input = this.$('.edit');
return this;
},
initialize: function(){
this.model.on('change', this.render, this);
},
events: {
Setelah itu simpan konfigurasi di atas, kemudian buka sekali lagi pada browser, kemudian pada salah
satu list klik dua kali, kemudian ubah kegiatan atau perbaiki kata-kata, setelah itu tekan “Enter”.
Buat sebuah event untuk fitur 'Delete' tersebut, letakkan pada bagian “events: { … },”.
Tambahkan sebuah fungsi javascript baru pada “app.TodoView”, letakkan di bagian akhir fungsi.
toggleCompleted: function() {
this.model.toggle();
},
destroy: function(){
this.model.destroy();
}
Setelah itu, buat sebuah tombol pada tampilan html untuk fitur 'Delete', tambahkan pada bagian <div
class="view"> … </div>
<button class="destroy">delete</button>
Simpan konfigurasi, kemudian buka halaman pada web browser, uji fitur 'Delete' dengan menekan
tombol 'Delete'.
Pada aplikasi Todo, fungsi router yang akan digunakan adalah untuk menyaring antara tugas-
tugas yang tertunda dana tugas yang telah selesai dikerjakan.
1. Tambahkan kode di bawah ini pada bagian <script> … </script>. Letakkan sebelum “app.appView =
new app.AppView();”.
app.Router = Backbone.Router.extend({
routes: {
'*filter' : 'setFilter'
},
setFilter: function(params) {
console.log('app.router.params = ' + params);
window.filter = params.trim() || '';
app.todoList.trigger('reset');
}
});
Tes dengan menambahkan “#example/test1/test2/test3” pada url, kemudian lihat pada console
browser.
2. Buat sebuah proses routing pada “app.AppView”, ubah baris pada “addAll: function()” dengan kode
di bawah ini.
addAll: function(){
this.$('#todo-list').html('');
switch(window.filter){
case 'pending':
_.each(app.todoList.remaining(), this.addOne);
break;
case 'completed':
_.each(app.todoList.completed(), this.addOne);
break;
default:
app.todoList.each(this.addOne, this);
break;
}
},
Agar kode di atas berfungsi, ubah versi dari backbonejs dari 1.0 ke versi 0.9, untuk mengunduhnya
dapat menuju link di bawah ini.
http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js
Setelah itu cek pada console browser Chrome, tambahkan tambahan “#/pending” dan “#/completed”,
jika terdapat error seperti pada gambar di bawah ini, berarti fungsi router telah berfungsi.
3. Kemudian, definisikan kode untuk tampilan '#/pending' dan '#/completed', ubah kode
“app.TodoList” dengan kode di bawah ini.
app.TodoList = Backbone.Collection.extend({
model: app.Todo,
localStorage: new Backbone.LocalStorage("todos-backbone"),
completed: function() {
return this.filter(function( todo ) {
return todo.get('completed');
});
},
remaining: function() {
return this.without.apply( this, this.completed() );
}
});
4. Buat sebuah link yang mengarahkan ke url “#/pending” dan “#/completed”, letakkan di antara kode
<header id="header"> … </header>, letakkan pada baris terakhir.
<div>
<a href="#/">tampilkan semua</a> |
<a href="#/pending">list pending</a> |
<a href="#/completed">list terselesaikan</a>
</div>
Kemudian, buka web browser untuk menguji konfigurasi halaman html di atas, centang kegiatan yang
telah diselesaikan, kemudian klik link “list terselesaikan”.