成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Backbone.js學(xué)習(xí)筆記(二)細(xì)說MVC

taoszu / 1891人閱讀

摘要:因?yàn)槭且粭l數(shù)據(jù)記錄,也就是說,相當(dāng)于是一個(gè)數(shù)據(jù)集。通常我們需要重載函數(shù),聲明,以及通過或?yàn)橐晥D指定根元素。通過綁定視圖的函數(shù)到模型的事件模型數(shù)據(jù)會(huì)即時(shí)的顯示在中。實(shí)例屬性參數(shù)以及類屬性參數(shù)會(huì)被直接注冊到集合的構(gòu)造函數(shù)。

對于初學(xué)backbone.js的同學(xué)可以先參考我這篇文章:Backbone.js學(xué)習(xí)筆記(一)

Backbone源碼結(jié)構(gòu)

   1:  (function() {

   2:      Backbone.Events        // 自定義事件

   3:      Backbone.Model        // 模型構(gòu)造函數(shù)和原型擴(kuò)展

   4:      Backbone.Collection    // 集合構(gòu)造函數(shù)和原型擴(kuò)展

   5:      Backbone.Router        // 路由配置器構(gòu)造函數(shù)和原型擴(kuò)展

   6:      Backbone.History        // 路由器構(gòu)造函數(shù)和原型擴(kuò)展

   7:      Backbone.View            // 視圖構(gòu)造函數(shù)和原型擴(kuò)展

   8:      Backbone.sync            // 異步請求工具方法

   9:      var extend = function (protoProps, classProps) { ... } // 自擴(kuò)展函數(shù)

  10:      Backbone.Model.extend = Backbone.Collection.extend = Backbone.Router.extend = Backbone.View.extend = extend; // 自擴(kuò)展方法

  11:  }).call(this);
JS MVC職責(zé)劃分

M 模型

業(yè)務(wù)模型:業(yè)務(wù)邏輯、流程、狀態(tài)、規(guī)則
(核心)數(shù)據(jù)模型:業(yè)務(wù)數(shù)據(jù)、數(shù)據(jù)校驗(yàn)、增刪改查(AJAX)

V 視圖

(核心)視圖:定義、管理、配置
模板:定義、配置、管理
組件:定義、配置、管理
(核心)用戶事件配置、管理
用戶輸入校驗(yàn)、配置、管理

C 控制器/分發(fā)器

(核心)事件分發(fā)、模型分發(fā)、視圖分發(fā)
不做數(shù)據(jù)處理、業(yè)務(wù)處理,即業(yè)務(wù)無關(guān)
擴(kuò)展:權(quán)限控制、異常處理等
C是JSMVC框架的核心,實(shí)現(xiàn)集中式配置和管理,可以有多個(gè)控制器

工具庫

主要是異步請求、DOM操作,可以依賴于jQuery等

來源:http://www.cnblogs.com/nuysoft/archive/2012/03/14/2395272.html

Model指的是一條一條的數(shù)據(jù),而集合Collection指的是對Model中的多條數(shù)據(jù)進(jìn)行管理。

模型 Model

我們用Backbone.Model表示應(yīng)用中所有數(shù)據(jù),models中的數(shù)據(jù)可以創(chuàng)建、校驗(yàn)、銷毀和保存到服務(wù)端。

對象賦值的方法

1、直接定義,設(shè)置默認(rèn)值

 Trigkit = Backbone.Model.extend({
             initialize : function () {
                 alert("hi!");
             },
             defaults:{
                 age : "22",
                 profession : "coder"
             }
         });
        var coder = new Trigkit;
        alert(coder.get("age"));//22

2、 賦值時(shí)定義

        
對象中的方法



當(dāng)模型實(shí)例化時(shí),他的initialize方法可以接受任意實(shí)例參數(shù),其工作原理是backbone模型本身就是構(gòu)造函數(shù),所以可以使用new生成實(shí)例:

var User = Backbone.Model.extend({
    initialize: function (name) {
        this.set({name: name});
    }
});
var user = new User("trigkit4");
alert(user.get("name"), "trigkit4");//trigkit4

看下backbone的源碼:

var Model = Backbone.Model = function(attributes, options) {
    var attrs = attributes || {};
    options || (options = {});
    this.cid = _.uniqueId("c");
    this.attributes = {};
    if (options.collection) this.collection = options.collection;
    if (options.parse) attrs = this.parse(attrs, options) || {};
    attrs = _.defaults({}, attrs, _.result(this, "defaults"));
    this.set(attrs, options);
    this.changed = {};
    this.initialize.apply(this, arguments);
  };

 initialize: function(){},//initialize是默認(rèn)的空函數(shù)
Model 的事件綁定

為了能及時(shí)更新view,我們需要通過事件綁定機(jī)制來處理和響應(yīng)用戶事件:

    

關(guān)于事件綁定,有on,off,trigger,once,listenTo,stopListening,listenToOnce等方法,具體參照:http://documentcloud.github.io/backbone/#Events

集合 Collection

Backbone.Collection就是一個(gè)Model對象的有序集合。因?yàn)?b>Model是一條數(shù)據(jù)記錄,也就是說,Collection相當(dāng)于是一個(gè)數(shù)據(jù)集。具有增加元素,刪除元素,獲取長度,排序,比較等一系列工具方法,說白了就是一個(gè)保存models的集合類。


collection.model覆蓋此屬性來指定集合中包含的模型類??梢詡魅朐紝傩詫ο螅ê蛿?shù)組)來 add, create,和 reset,傳入的屬性會(huì)被自動(dòng)轉(zhuǎn)換為適合的模型類型。

視圖 View

Backbone.View中可以綁定dom元素和客戶端事件。頁面中的html就是通過viewsrender方法渲染出來的,當(dāng)新建一個(gè)view的時(shí)候通過要傳進(jìn)一個(gè)model作為數(shù)據(jù)

view.$el:一個(gè)視圖元素的緩存jQuery對象。 一個(gè)簡單的引用,而不是重新包裝的DOM元素。 
一個(gè)簡單的View:

    
    Document
    
    
    
    


elview.el所有的視圖都擁有一個(gè) DOM 元素(el 屬性),即使該元素仍未插入頁面中去。 視圖可以在任何時(shí)候渲染,然后一次性插入 DOM 中去,這樣能盡量減少 reflowsrepaints 從而獲得高性能的 UI 渲染。 this.el 可以從視圖的 tagName, className, idattributes 創(chuàng)建,如果都未指定,el 會(huì)是一個(gè)空 div。 --官網(wǎng)

擴(kuò)展方法 extend

模型、集合、視圖、路由器都有一個(gè)extend方法,用于擴(kuò)展原型屬性和靜態(tài)屬性,創(chuàng)建自定義的模型、集合、視圖、路由器類。

Backbone.Model.extend
Backbone.Model.extend(properties, [classProperties])

要?jiǎng)?chuàng)建自己的 Model 類,你可以擴(kuò)展 Backbone.Model 并提供實(shí)例 properties(屬性) , 以及可選的可以直接注冊到構(gòu)造函數(shù)的classProperties(類屬性)。

Backbone.View.extend
Backbone.View.extend(properties, [classProperties])

開始創(chuàng)建自定義的視圖類。 通常我們需要重載 render 函數(shù),聲明 events, 以及通過 tagName, className, 或 id 為視圖指定根元素。 Backbone.View通過綁定視圖的 render 函數(shù)到模型的 "change" 事件 — 模型數(shù)據(jù)會(huì)即時(shí)的顯示在 UI 中。

Backbone.Collection.extend
Backbone.Collection.extend(properties, [classProperties])

通過擴(kuò)展 Backbone.Collection 創(chuàng)建一個(gè) Collection 類。實(shí)例屬性參數(shù) properties 以及 類屬性參數(shù) classProperties 會(huì)被直接注冊到集合的構(gòu)造函數(shù)。

Backbone.Router.extend
Backbone.Router.extend(properties, [classProperties])

開始創(chuàng)建一個(gè)自定義的路由類。當(dāng)匹配了 URL 片段便執(zhí)行定義的動(dòng)作,并可以通過 routes 定義路由動(dòng)作鍵值對。

Router與controller

controllerBackbone 0.5以前的叫法,現(xiàn)在改名叫Router了。

Backbone.Router 為客戶端路由提供了許多方法,并能連接到指定的動(dòng)作(actions)和事件(events)。
頁面加載期間,當(dāng)應(yīng)用已經(jīng)創(chuàng)建了所有的路由,需要調(diào)用 Backbone.history.start()

查看下面示例:


在瀏覽器里打開頁面后,在urlhtml后面依次加上:

#/index
#/task/1
#/test/xxxx

將分別彈出出:index, 1, test/xxxx

這就是Router的功能。

  

backbone github官網(wǎng):http://documentcloud.github.io/backbone/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85626.html

相關(guān)文章

  • Backbone.js學(xué)習(xí)筆記(一)

    摘要:它通過數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過模型集合器提供一套豐富的用于枚舉功能,通過視圖來進(jìn)行事件處理及與現(xiàn)有的通過接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問,如需幫助請加本人微信hawx1993或QQ345823102,非誠勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見 4.為你的前端之路提供極具建設(shè)性的...

    FrancisSoung 評論0 收藏0
  • Backbone.js學(xué)習(xí)筆記 Hello World!

    摘要:使用和架構(gòu)創(chuàng)建一個(gè)典型的項(xiàng)目。屬性被賦值給傳入的函數(shù)運(yùn)行的結(jié)果。渲染,我們使用,這是一個(gè)對象,它指向的屬性,使用函數(shù)使用的結(jié)果替換。最后,啟動(dòng)整體應(yīng)用,為了保證完全加載,用包裝器調(diào)用完整日常練習(xí)一些在對象初始化的時(shí)候執(zhí)行的代碼 使用Backbone.js 和 MVC 架構(gòu)創(chuàng)建一個(gè)典型的Hello world項(xiàng)目。雖然是殺雞用牛刀了,畢竟是我第一次使用Backbone.js 依賴 ...

    Hanks10100 評論0 收藏0
  • Backbone.js學(xué)習(xí)筆記:圖書案例-事件綁定

    摘要:數(shù)據(jù)更新的時(shí)候,支持多事件和自定義事件。然后使用兩個(gè)事件和的自定義事件。我們將使用別名函數(shù)。是為了模擬從服務(wù)器獲取響應(yīng)的時(shí)間。在它內(nèi)部里面,使用和返回模型屬性把選中的模型賦值給當(dāng)前視圖的模型。 前言: 我們繼續(xù)使用上一次寫的圖書案例,在基礎(chǔ)上面進(jìn)行改進(jìn)! 事件綁定 在我們?yōu)g覽網(wǎng)頁的時(shí)候,獲取數(shù)據(jù)并不是一下只就全部獲取到的,為了創(chuàng)建一個(gè)更好的用戶體驗(yàn),就來模擬一個(gè)加載(Spi...

    caige 評論0 收藏0
  • springboot學(xué)習(xí))——springmvc配置使用

    摘要:中添加攔截器配置如下攔截所有請求,也就是,只攔截開頭的請求。在中并沒有提供配置文件的方式來配置攔截器,因此需要使用的代碼式配置,配置如下這個(gè)屬性通常并不需要手動(dòng)配置,高版本的會(huì)自動(dòng)檢測第四點(diǎn)講下靜態(tài)資源映射。 以下內(nèi)容,如有問題,煩請指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進(jìn)行實(shí)際的應(yīng)用開發(fā),基本上尋著sprin...

    hiyayiji 評論0 收藏0
  • 用Jasmine和Sinon測試Backbone應(yīng)用 (譯)

    摘要:框架本身可以很好地支持自下而上的單元測試。在中,這些原因可以分為性能真實(shí)的操作,依靠定時(shí)行為及網(wǎng)絡(luò)活動(dòng)減慢了測試隔離單元測試應(yīng)把重點(diǎn)放在小的一塊功能成為可能,并解耦不可靠的或低依賴使用對象是擁抱和的基本組成部分。 最近在慢慢深入Backbone,也試著寫一些測試,找一些合適的文檔來學(xué)習(xí)。于是就找到了一個(gè)系列的文章 : Testing Backbone applications with...

    ralap 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<