開始backbone


官方網站是這樣描述backbone.js的,它是一個用來組織大量JS的良好框架。

了解什么是MVC模式
我用過很多聲稱是MVC的框架,但我認為我並未見過遵循相同的規則來實現相同的方法。
backbone.js有四種類型:Models, Views, Controllers和Collections. Models和Collections類關系密,當它們組合在一起就行成了M(model).

當我在用Backbone.js的時候,我所采用的主要內容是讓Views來監聽Model的改變,然后其做出相應的改變。我推薦把backbone的文檔和源碼都仔細的閱讀一番

開始

我在開始的時候,往往習慣於讓你快速的瀏覽一下我的整個示例,讓你有一個正確的學習路線,不致於像我似的剛開始學習的時候誤入歧途。
首先,我來建立一個頁面,它包含backbone.js和Underscore.js(這是我們的主角所依賴的Js庫)。
<!DOCTYPE html>
<html>
<head>
<title>I have a back bone</title>
</head>
<body>
<button id="add-friend">Add Friend</button>
<ul id="firends-list">
</ul>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
    <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
</body>
</html>

設立主View
每一個view都會有一個相應的DOM element和它相關聯。至於為什么你可以參考以下內容:
以下內容來自backbone的官方網站:http://documentcloud.github.com/backbone/#View-el,

elview.el,所有的Views總是有一個DOM element.(the el property), 不管它們是已經在page中還是不在。這樣,views在任何時候都可以顯示,也可以全部插入DOM中。為了追求高效的UI顯示,盡量用更少的重排和重畫。 this.el可以通過view的tagName, className,id和attributes,這些來構建。而如果以上列舉的並沒有出現,那么會創建一個空的div

var ItemView=Backbone.view.extend({tagName:'li'});

var BodyView=Backbone.view.extend({el:'body'});

var item=new ItemView();
var body=new BodyView();

因為這是我們的master view,所以我們會設body。如果一個指定的el(element)不存在,那么Backbone.js就會試圖創建它。
(function($){
    window.AppView=Backbone.View.extend({
        el:$("body"),
        events:{
            "click #add-friend":"showPrompt",
        },
        showPrompt:function(){
            var friend_name=prompt("Who is your friend?");
        }
    });
    var appView=new AppView;
})(jQuery);
我們僅僅是把我們的Backbone代碼用jQuery來包裝了一下來確實我們的page能正確的加載。然后我們創建我們的主程序View通過擴展Backbone 並傳遞一個JSON對象做為參數。我們指定‘body'做為我們View相關的element.

events屬性是非常有用的並且讓我們來監聽我們的views.在這個示例中,我們綁定一個click事件到id為"add-friend"的按鈕上。

我們已經設置了我們的程序View, 我們現在可以在任何時候來初始化它了。

Collecting the Models
一個model在backbone.js中可以代表任何的一個實體,而在這個示例中我們希望它代表一個朋友。我們可以很輕松的創立一個朋友Model不用任何的結構,但是它對我們是作用不大的,因為我們不能迭代它們除非我們讓他們在一起。Backbone.js通過一個Collection Class讓我們來排列我們的models

現在讓我們來開始我們之中的有趣的部分,你可以綁定listeners/events至一個Models和collections.不論何時我們改變任何的數據都會讓evens來做出相應的改變。
讓我們把一個friend Model加到我們的firend collection.然后讓我們來綁定一個listener來創建一個新的list element當相應的數據被改變的時候。

(function($){
    Firend=Backbone.Model.extend({
    //Create a model to hold firend attribute
    name:null
    });
    
    Friends=Backbone.Collection.extend({
        //This is our friends collection and hols our friend models
        initialize:function(models, options){
            this.bind("add", options.view.addFriendLi);
            //Listen for new additions to the collection and all a view function if so
        }
    });
    
    AppView=Backbone.View.extend({
        el:$("body"),
        initialize:function(){
            this.friends=new Friends(null, {view:this});
            //Create a friends collection when the view is initialized,
            //Pass it a reference to this view to create a connection between the two
        },
        events:{
            "click #add-friend":"showPrompt"
        },

    addFriendLi:function(model){
                $("#friends-list").append("<li>"+model.get('name')+"</li>");
            },
        showPrompt:function(){
            var friend_name=prompt("who is your friend?");
            var firend_model=new Friend({name: friend_name});
            this.firends.add(friend_model);           
        }
    });
    
    var appView=new AppView;
})(jQuery);

Demo:http://thomasdavis.github.com/examples/backbone-101/

Code:https://github.com/thomasdavis/thomasdavis.github.com/tree/master/examples/backbone-101

 

原文:http://thomasdavis.github.com/2011/02/01/backbone-introduction.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM