<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識

        來源:懂視網 責編:小采 時間:2020-11-27 21:50:08
        文檔

        深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識

        深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識:backbone必須依賴underscore.js才能夠使用,它必須通過underscore中的函數來完成訪問頁面元素、處理元素的基本操作。 注:backbone可以很好的與其它js庫一起工作,所以說它是一個庫,而不是框架。 Underscore并沒有對原生對象進行擴展,而是調用_()方法
        推薦度:
        導讀深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識:backbone必須依賴underscore.js才能夠使用,它必須通過underscore中的函數來完成訪問頁面元素、處理元素的基本操作。 注:backbone可以很好的與其它js庫一起工作,所以說它是一個庫,而不是框架。 Underscore并沒有對原生對象進行擴展,而是調用_()方法

        backbone必須依賴underscore.js才能夠使用,它必須通過underscore中的函數來完成訪問頁面元素、處理元素的基本操作。
        注:backbone可以很好的與其它js庫一起工作,所以說它是一個庫,而不是框架。
        Underscore并沒有對原生對象進行擴展,而是調用_()方法進行封裝,一旦封裝完成,js對象就變為Underscore對象,也可以通過Underscore對象的Value()方法獲取原生js對象中的數據。(jquery通過$()方法得到Jquery對象)
        Underscore總共有60多個函數,按照處理對象的不同,可以分為集合類、數組類、功能函數類、對象類、工具函數類五大類模塊。

        underscore template()函數說明:

        該函數包含三種模板:

        (1)<% %>:包含邏輯代碼,渲染后不會展現。
        (2)<%= %>:數據類型,渲染后展示數據。
        (3)<%- %>:將HTML標記轉換為常用字符串,以避免代碼攻擊。

        調用格式:

        沒有實現雙向數據綁定。

        1、Underscore對象封裝
        Underscore并沒有在原生的JavaScript對象原型中進行擴展,而是像jQuery一樣,將數據封裝在一個自定義對象中(下文中稱“Underscore對象”)。
        你可以通過調用一個Underscore對象的value()方法來獲取原生的JavaScript數據,例如:

        2、優先調用JavaScript 1.6內置方法
        Underscore中有許多方法在JavaScript1.6中已經被納入規范,因此在Underscore對象內部,會優先調用宿主環境提供的內置方法(如果宿主環境已經實現了這些方法),以此提高函數的執行效率。
        而對于不支持JavaScript 1.6的宿主環境,Underscore會通過自己的方式實現,而對開發者來說,這些完全是透明的。
        這里所說的宿主環境,可能是Node.js運行環境,或客戶端瀏覽器。

        3、改變命名空間
        Underscore默認使用_(下劃線)來訪問和創建對象,但這個名字可能不符合我們的命名規范,或容易引起命名沖突。
        我們可以通過noConflict()方法來改變Underscore的命名,并恢復_(下劃線)變量之前的值,例如:

        4、鏈式操作
        還記得我們在jQuery中是如何進行鏈接操作嗎?例如:

        Underscore同樣支持鏈式操作,但你需要先調用chain()方法進行聲明:

        如果調用了chain()方法,Underscore會將所調用的方法封裝在一個閉包內,并將返回值封裝為一個Underscore對象并返回:

        5、擴展Underscore
        我們可以通過mixin()方法輕松地向Underscore中擴展自定義方法,例如:

        這些方法被追加到Underscore的原型對象中,所有創建的Underscore對象都可以使用這些方法,它們享有和其它方法同樣的環境。

        6、遍歷集合
        each()和map()方法是最常用用到的兩個方法,它們用于迭代一個集合(數組或對象),并依次處理集合中的每一個元素,例如:

        map()方法與each()方法的作用、參數相同,但它會將每次迭代函數返回的結果記錄到一個新的數組并返回。

        7、函數節流
        函數節流是指控制一個函數的執行頻率或間隔(就像控制水流的閘門一樣),Underscore提供了debounce()和throttle()兩個方法用于函數節流。
        為了更清楚地描述這兩個方法,假設我們需要實現兩個需求:

        需求1:當用戶在文本框輸入搜索條件時,自動查詢匹配的關鍵字并提示給用戶(就像在Tmall輸入搜索關鍵字時那樣)
        首先分析第1個需求,我們可以綁定文本框的keypress事件,當輸入框內容發生變化時,查詢匹配關鍵字并展示。假設我想查詢“windows phone”,它包含13個字符,而我輸入完成只花了1秒鐘(好像有點快,就意思意思吧),那么在這1秒內,調用了13次查詢方法。這是一件非常恐怖的事情,如果Tmall也這樣實現,我擔心它會不會在光棍節到來之前就掛掉了(當然,它并沒有這么脆弱,但這絕對不是最好的方案)
        更好的方法是,我們希望用戶已經輸入完成,或者正在等待提示(也許他懶得再輸入后面的內容)的時候,再查詢匹配關鍵字。
        最后我們發現,在我們期望的這兩種情況下,用戶會暫時停止輸入,于是我們決定在用戶暫停輸入200毫秒后再進行查詢(如果用戶在不斷地輸入內容,那么我們認為他可能很明確自己想要的關鍵字,所以等一等再提示他)
        這時,利用Underscore中的debounce()函數,我們可以輕松實現這個需求:

        輸出函數的返回值)。
        <%- %>:用于輸出數據,同時會將數據中包含的HTML字符轉換為實體形式(例如它會將雙引號轉換為"形式),用于避免XSS攻擊。
        當我們希望將數據中的HTML作為文本顯示出來時,常常會使用<%- %>標簽。
        Underscore還允許你修改這3種標簽的形式,如果我們想使用{% %}、{%= %}、{%- %}作為標簽,可以通過修改templateSettings來實現,就像這樣:

        在本例中,我們將模板內容和需要填充的數據傳遞給template方法,它會按以下順序進行處理:

        (1)將模板內容解析為可執行的JavaScript(解析模板標簽)
        (2)通過with語句將解析后的JavaScript作用域修改為我們傳遞的數據對象,這使我們能夠直接在模板中通過變量形式訪問數據對象的屬性
        (3)執行解析后的JavaScript(將數據填充到模板)
        (4)返回執行后的結果
        我們經常會遇到一種情況:多次調用template方法將數據渲染到同一個模板。
        假設我們有一個分頁列表,列表中的每一條數據都通過模板渲染,當用戶進入下一頁,我們會獲取下一頁的數據并重新渲染,實際上每次渲染的模板都是同一個,但剛才描述的template所有處理過程總會被執行。
        其實Underscore的template方法提供了一種更高效的調用方式,我們將上面代碼中的最后兩句修改為:

        你會發現細微的差別:我們在調用template方法時只傳遞了模板內容,而沒有傳遞數據,此時template方法會解析模板內容,生成解析后的可執行JavaScript代碼,并返回一個函數,而函數體就是解析后的JavaScript,因此當我們調用該函數渲染數據時,就省去了模板解析的動作。

        你應該將返回的函數存儲起來(就像我將它存儲在render變量中一樣),再通過調用該函數來渲染數據,特別是在同一個模板可能會被多次渲染的情況下,這樣做能提高執行效率(具體提升多少,應該根據你的模板長度和復雜度而定,但無論如何,這都是一個良好的習慣)。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識

        深入解析Backbone.js框架的依賴庫Underscore.js的作用_基礎知識:backbone必須依賴underscore.js才能夠使用,它必須通過underscore中的函數來完成訪問頁面元素、處理元素的基本操作。 注:backbone可以很好的與其它js庫一起工作,所以說它是一個庫,而不是框架。 Underscore并沒有對原生對象進行擴展,而是調用_()方法
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线视频网址免费播放| 国产成人综合亚洲绿色| 四虎国产精品永久免费网址| AV在线亚洲男人的天堂| 国产成人精品免费视频大全| 国产亚洲av片在线观看18女人| 麻豆91免费视频| 亚洲伊人久久综合影院| 一区二区三区免费看| 亚洲一区二区三区香蕉| 在线观看免费无码视频| 亚洲av之男人的天堂网站| 99精品一区二区免费视频| 亚洲日产2021三区| 日韩免费视频网站| 日本高清免费中文在线看| 亚洲无av在线中文字幕| 免费国产黄网站在线观看可以下载| 亚洲av成人无码久久精品| 在线日本高清免费不卡| 67194在线午夜亚洲| 免费人成网站7777视频| 二区久久国产乱子伦免费精品| 亚洲av日韩av不卡在线观看| 99久久精品日本一区二区免费 | 8x成人永久免费视频| 亚洲av永久无码精品天堂久久| 免费看片A级毛片免费看| 国产精品偷伦视频免费观看了 | 校园亚洲春色另类小说合集| 国产精品亚洲玖玖玖在线观看| 免费在线看黄网站| 亚洲一卡一卡二新区无人区| 亚洲精品无码99在线观看 | 最近2019中文字幕免费看最新| 亚洲成AV人影片在线观看| 亚洲精品午夜无码电影网| 久久久久国色AV免费观看性色| 一级特级aaaa毛片免费观看| 亚洲网站视频在线观看| 亚洲国产精品第一区二区三区|