隨著Web端功能的日益復(fù)雜,人們開始考慮這樣一些問題:
如何更好地模塊化開發(fā),業(yè)務(wù)數(shù)據(jù)如何組織,界面和業(yè)務(wù)數(shù)據(jù)之間通過何種方式進行交互
在這種背景下,出現(xiàn)了一些前端MVC、MVP、MVVM框架,我們把這些框架統(tǒng)稱為MV*框架。這些框架的出現(xiàn),都是為了解決上面這些問題,具體的實現(xiàn)思路各有不同,主流的有Backbone,AngularJS,Ember,Spine等等,本文主要選用Backbone和AngularJS來講述以下場景。
1. 數(shù)據(jù)模型
在這些框架里,定義數(shù)據(jù)模型的方式與以往有些差異,主要在于數(shù)據(jù)的get和set更加有意義了,比如說,可以把某個實體的get和set綁定到RESTful的服務(wù)上,這樣,對某個實體的讀寫可以更新到數(shù)據(jù)庫中。另外一個特點是,它們一般都提供一個事件,用于監(jiān)控數(shù)據(jù)的變化,這個機制使得數(shù)據(jù)綁定成為可能。在一些框架中,數(shù)據(jù)模型需要在原生的Java類型上做一層封裝。defaults方法用于提供模型的默認值,initialize方法用于做一些初始化工作,這兩個都是約定的方法,toggle是自定義的,用于保存todo的選中狀態(tài)。除了對象,Backbone也支持集合類型,集合類型在定義的時候要通過model屬性指定其中的元素類型。
如果你想學(xué)習(xí)一門IT技術(shù),并希望從web前端開發(fā)這個基礎(chǔ)的編程技術(shù)入門。你可以來這個裙。前面是六 ⑤ 7,中間是1 三 7 ,后面是九 O 六。在這里有新的web前端開發(fā)技術(shù)課程,mf學(xué)習(xí)。也有很多人指導(dǎo)你進步,不需要你付出什么,只要你有一顆學(xué)習(xí)的心就可以了。不愿意認真學(xué)習(xí)或者自認為不需要學(xué)習(xí)的就不要加了!
數(shù)據(jù)模型也可以包含一些方法,比如自身的校驗,或者跟后端的通訊、數(shù)據(jù)的存取等等,在上面兩個例子中,也都有體現(xiàn)。AngularJS的模型定義方式與Backbone不同,可以不需要經(jīng)過一層封裝,直接使用原生的Java簡單數(shù)據(jù)、對象、數(shù)組,相對來說比較簡便。
2. 控制器
在Backbone中,是沒有獨立的控制器的,它的一些控制的職責都放在了視圖里,所以其實這是一種MVP(Model View Presentation)模式,而AngularJS有很清晰的控制器層。
還是以這個todo為例,在AngularJS中,會有一些約定的注入,比如$scope,它是控制器、模型和視圖之間的橋梁。在控制器定義的時候,將$scope作為參數(shù),然后,就可以在控制器里面為它添加模型的支持。
3. 視圖
在這些主流的MV*框架中,一般都提供了定義視圖的功能。也有那么一些視圖,需要依賴于界面上的已有元素,比如下面這個,它通過el屬性,指定了HTML中id為todoapp的元素,并且還在initialize方法中引用了另外一些元素,通常,需要直接放置到界面的頂層試圖會采用這種方式,而“部件”視圖一般由主視圖來創(chuàng)建、布局。改變模型可以隨時反映到界面上在界面上做的操作(輸入,選擇等等)可以實時反映到模型里。而且,這種綁定都會自動忽略其中可能因為空數(shù)據(jù)而引起的異常情況。
4. 模板
模板是這個時期一種很典型的解決方案。我們常常有這樣的場景:在一個界面上重復(fù)展示類似的DOM片段,例如微博。但是使用模板技術(shù),這一切可以更加優(yōu)雅。
主流的模板技術(shù)都提供了一些特定的語法,有些功能很強。值得注意的是,他們雖然與JSP之類的代碼寫法類似甚至相同,但原理差別很大,這些模板框架都是在瀏覽器端執(zhí)行的,不依賴任何服務(wù)端技術(shù),即使界面文件是.html也可以,而傳統(tǒng)比如JSP模板是需要后端支持的,執(zhí)行時間是在服務(wù)端。