摘要:數(shù)據(jù)更新的時(shí)候,支持多事件和自定義事件。然后使用兩個(gè)事件和的自定義事件。我們將使用別名函數(shù)。是為了模擬從服務(wù)器獲取響應(yīng)的時(shí)間。在它內(nèi)部里面,使用和返回模型屬性把選中的模型賦值給當(dāng)前視圖的模型。
事件綁定前言: 我們繼續(xù)使用上一次寫(xiě)的圖書(shū)案例,在基礎(chǔ)上面進(jìn)行改進(jìn)!
在我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候,獲取數(shù)據(jù)并不是一下只就全部獲取到的,為了創(chuàng)建一個(gè)更好的用戶(hù)體驗(yàn),就來(lái)模擬一個(gè)加載(Spinner)的圖片來(lái)告訴用戶(hù)正在獲取數(shù)據(jù)中!
當(dāng)用戶(hù)在瀏覽詳細(xì)視圖(books/:BookName),只需要調(diào)用加載數(shù)據(jù)的方法。然后,因?yàn)樵O(shè)置了正確的監(jiān)聽(tīng)器,當(dāng)接受到新的數(shù)據(jù)的時(shí)候,視圖就會(huì)自動(dòng)更新。數(shù)據(jù)更新的時(shí)候,Backbone支持多事件和自定義事件。
改變路由程序里面的代碼:
// 渲染Books頁(yè)面 loadBook: function (bookName){ this.bookView.loadBook(bookName); }
除了bookView類(lèi),其他都不會(huì)改變。添加構(gòu)造函數(shù)或者initialize方法,initialize方法是Backbone里面的一個(gè)特殊的字符屬性。每個(gè)實(shí)例初始化的時(shí)候都會(huì)調(diào)用這個(gè)屬性對(duì)應(yīng)的方法。
然后使用兩個(gè)事件——change和spinner的自定義事件。我們將使用on()(別名bind)函數(shù)。
initialize: function (){ this.model = new (Backbone.Model.extend({})); this.model.bind("change", this.render, this); this.bind("spinner", this.showSpinner, this); }
上面的代碼做了兩件簡(jiǎn)單的事情:
當(dāng)模型改變時(shí)候調(diào)用render()函數(shù)
當(dāng)事件spinner觸發(fā)時(shí)調(diào)用showSpinner()函數(shù)
然后spinner怎么辦呢?,那就用一個(gè)簡(jiǎn)單的gif圖片把!在bookView里創(chuàng)建一個(gè)新的屬性:
templateSpinner: ""
spinner圖片(上網(wǎng)找一大堆):
接著回到一開(kāi)始那個(gè)loadBook函數(shù)里面,繼續(xù)寫(xiě)代碼:
loadBook: function (bookName){ this.trigger("spinner"); // 出現(xiàn)加載圖片 var me = this; // 需要在閉包訪(fǎng)問(wèn)this setTimeout(function (){ // 模擬從服務(wù)器獲取數(shù)據(jù)要的時(shí)間 me.model.set(me.collection.where({ name: bookName })[0].attributes); }, 1000); }
里面觸發(fā)了spinner事件,還有為了解決作用域的問(wèn)題,需要在閉包里面訪(fǎng)問(wèn)this。
setTimerout是為了模擬從服務(wù)器獲取響應(yīng)的時(shí)間。在它內(nèi)部里面,使用model.set()和model.attributes(返回模型屬性)把選中的模型賦值給當(dāng)前視圖的模型。
最后把render函數(shù)里面多余的代碼去掉,實(shí)現(xiàn)showSpinner函數(shù):
render: function (bookName){ var bookHtml = this.template(this.model); $("body").html(bookHtml); }, showSpinner: function (){ $("body").html(this.templateSpinner); }
讓后打開(kāi)瀏覽器訪(fǎng)問(wèn)index.html#books/book1,如果可以看到加載的圖片的話(huà),就證明成功啦!
最后附上完整的代碼backbone日常練習(xí)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/85520.html
摘要:它通過(guò)數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過(guò)模型集合器提供一套豐富的用于枚舉功能,通過(guò)視圖來(lái)進(jìn)行事件處理及與現(xiàn)有的通過(guò)接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問(wèn),如需幫助請(qǐng)加本人微信hawx1993或QQ345823102,非誠(chéng)勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見(jiàn) 4.為你的前端之路提供極具建設(shè)性的...
摘要:因?yàn)槭且粭l數(shù)據(jù)記錄,也就是說(shuō),相當(dāng)于是一個(gè)數(shù)據(jù)集。通常我們需要重載函數(shù),聲明,以及通過(guò)或?yàn)橐晥D指定根元素。通過(guò)綁定視圖的函數(shù)到模型的事件模型數(shù)據(jù)會(huì)即時(shí)的顯示在中。實(shí)例屬性參數(shù)以及類(lèi)屬性參數(shù)會(huì)被直接注冊(cè)到集合的構(gòu)造函數(shù)。 對(duì)于初學(xué)backbone.js的同學(xué)可以先參考我這篇文章:Backbone.js學(xué)習(xí)筆記(一) Backbone源碼結(jié)構(gòu) showImg(https://segme...
摘要:有數(shù)百個(gè)免費(fèi)的庫(kù)出來(lái),為應(yīng)用程序選擇正確的框架變得非常困難。是流行的驅(qū)動(dòng)技術(shù)之一,由于年創(chuàng)建。在這三個(gè)塊中,有幾個(gè)暴露低層接口的綁定。反應(yīng)由,和許多開(kāi)發(fā)人員和個(gè)人的社區(qū)維護(hù)。誕生于年,是一個(gè)輕量級(jí)的框架。 有數(shù)百個(gè)免費(fèi)的JS庫(kù)出來(lái),為應(yīng)用程序選擇正確的JavaScript框架變得非常困難。一些開(kāi)發(fā)商最終會(huì)拋棄,而其他開(kāi)發(fā)者則迅速發(fā)展,并得到廣泛采用。許多開(kāi)發(fā)人員只知道像jQuery和R...
摘要:接受個(gè)參數(shù),包括事件的名稱(chēng),回調(diào)函數(shù)和回調(diào)函數(shù)執(zhí)行的上下文環(huán)境。保留回調(diào)函數(shù)在數(shù)組中取出對(duì)應(yīng)的以及中的函數(shù)。當(dāng)然,你同樣可以在綁定的回調(diào)函數(shù)執(zhí)行前手動(dòng)通過(guò)將其移除。 Backbone源碼解讀 Backbone在流行的前端框架中是最輕量級(jí)的一個(gè),全部代碼實(shí)現(xiàn)一共只有1831行1。從前端的入門(mén)再到Titanium,我雖然幾次和Backbone打交道但是卻對(duì)它的結(jié)構(gòu)知之甚少,也促成了我想讀...
摘要:個(gè)人認(rèn)為,讀懂老牌框架的源代碼比會(huì)用流行框架的要有用的多。另外,源代碼中所有的以開(kāi)頭的方法,可以認(rèn)為是私有方法,是沒(méi)有必要直接使用的,也不建議用戶(hù)覆蓋。 寫(xiě)在前面 backbone是我兩年多前入門(mén)前端的時(shí)候接觸到的第一個(gè)框架,當(dāng)初被backbone的強(qiáng)大功能所吸引(當(dāng)然的確比裸寫(xiě)js要好得多),雖然現(xiàn)在backbone并不算最主流的前端框架了,但是,它里面大量設(shè)計(jì)模式的靈活運(yùn)用,以及令...
閱讀 3098·2021-11-22 09:34
閱讀 601·2021-11-22 09:34
閱讀 2447·2021-10-08 10:18
閱讀 3384·2021-09-22 15:57
閱讀 2595·2021-09-22 15:25
閱讀 2412·2019-08-30 15:54
閱讀 2120·2019-08-30 15:44
閱讀 1805·2019-08-29 11:18