PHP, Ruby, Python .. 等語言都已經相當熟悉,進階開發者也都接觸了好用的後端 Framework 如 CodeIgniter, CakePHP, Django, Ruby on Rail, Yii, Symfony .. 等,用 Framework 最大的好處並不是在 Framework 提供了大量工具,而是制定了 MVC 架構,讓專案多位開發者可以遵循,上了講了這麼多後端 MVC Framework,那麼前端呢?接下來介紹前端強大工具: Backbone.js
什麼是 Backbone.js 簡單來說 Backbone.js 就是一套前端 Javascript Framework,它提供 MVC 架構,相信大家都玩過後端 MVC,那至於前端呢,好像比較少人提到,這就是介紹 Backbone.js 最主要的目的。Backbone.js 包含了 Model View Controller 來讓使者操作,Model 提供了key-value 結構,以及可以 binding 大量 event,開發者可以透過 RESTful JSON interface 來跟 Backbone.js 的 Model 及 Collection 搭配。如果想瞭解 Backbone.js 線上文件可以參考
GitHub 網站,如果想瞭解程式碼可以參考 source code 註解。
載入 Backbone.js 在使用 Backbone.js 之前,大家必須要先瞭解,Backbone.js 有使用到兩個額外的 Library,那就是
Underscore.js( > 1.3.1) 及 jQuery( > 1.4.2),所以在 html 裡面,我們可以這樣寫
Friend List
使用 Backbone.js 接下來宣告 View 的作法:
window.AppView = Backbone.View.extend({
el: $("body"),
initialize: function () {
this.friends = new Friends({ view: this });
},
events: {
"click #add-friend": "showPrompt"
},
showPrompt: function () {
var username = $("input[name=username]").val() || "";
alert(username);
}
});
var appview = new AppView;可以看到上面,程式裡面增加了一個 Clieck event,並且點選後會轉到 showPrompt 這 callback function,直接在頁面上跳出 alert 視窗,並且顯示您輸入的名稱。接下來要新增 Model 跟 Collection。Friend = Backbone.Model.extend({
name: null
});
Friends = Backbone.Collection.extend({
initialize: function (options) {
this.bind("add", options.view.addFriendList);
}
});宣告 Friend Model 用來設定使用者名稱,而 Friends Collection 則是用來設定多個 Model,初始化 initialize 時則設定 add event,當 Collection 有變動時,則會呼叫 View 裡面的 addFriendList function。完整 js 碼如下(function ($) {
Friend = Backbone.Model.extend({
name: null
});
Friends = Backbone.Collection.extend({
initialize: function (options) {
this.bind("add", options.view.addFriendList);
}
});
window.AppView = Backbone.View.extend({
el: $("body"),
initialize: function () {
this.friends = new Friends({ view: this });
},
events: {
"click #add-friend": "showPrompt",
"click .delete": "delete_li"
},
delete_li: function(e) {
$(e.currentTarget).parent().remove();
},
showPrompt: function () {
var username = $("input[name=username]").val() || "";
this.friend_model = new Friend({'name': username});
this.friends.add(this.friend_model);
},
addFriendList: function (model) {
$("#friends-list").append("
See also
- Backbone.js 1.1.1 Release 釋出 AMD 版本
- Javscript 18 歲生日歷史演進
- jquery-serialize-object 不支援 IE7,8 瀏覽器?
- 將 Backbone Framework 升級到 1.1.0 注意事項
- RequireJS 搭配 CKEditor
- CodeIgniter REST Server with Backbone.js Issue
- Cross Site Request Forgery in JS Web Apps and CodeIgniter PHP Framework
- Coding on workspace of Chrome Developer tools
- Backbone Routing pushState in IE
- [小技巧] JavaScript Cross Browser Best Practices
