對于knockoutJS來講,模闆綁定和Mapping插件綁定是十分重要的功能,雖然模闆綁定在我工作中用的及其少,但模闆綁定的重要性不可忽視,在其他前端架構中,如Angular、Vue等等,模闆存在的意義十分重要,Mapping插件使得我們能夠脫離手工綁定,及其友善我們快速綁定達到預期效果。
KnockoutJS模闆綁定更多用法:https://knockoutjs.com/documentation/template-binding.html
在mvc的開發中,對于常用的一些獨立的Html,習慣将它變成分布視圖或是視圖元件,以此來友善調用以及重用,同時也達到解耦效果,同樣在前端開發中,對于部分重用度很高、複雜度高的UI、嵌套UI等這些部分,我們也可以設計成模闆。

在knockoutJS中通過template綁定将模闆綁定到預期DOM元素中,将模闆所依賴的資料呈現。模闆綁定對于建構嵌套結構的頁面十分友善,預設情況, Knockout使用jquery.tmpl模闆引擎,使用模闆綁定時,需引用jquery.tmpl和jQuery架構,或者你也可以內建其它的模闆引擎(需要了解Knockout 内部知識)。
模闆文法:
${ someValue }
{{html someValue}}
{{if someCondition}}
{{else someCondition}}
{{each someArray}}
具體了解模闆文法可以檢視:http://www.php.cn/js-tutorial-383558.html
如果你僅僅是聲明的字元串,KO将會使用它作為模闆的ID去渲染。應用在模闆上的資料是你目前的viewModel對象。
1、建構一個簡單模闆
通過設計一個簡單的模闆,在viewModel中的name或age發生改變後,Knockout将自動重新render模闆。在該例子裡,每次點選按鈕都會重新渲染該模闆。
2、建構一個性能更好點的簡單模闆
通過data-bind的形式将屬性綁定時,如果屬性改變了,将直接改變值,而無需重新渲染模闆,這比通過${property}方式更加高效點,但是如果說模闆内容較小較簡單,直接使用${property}這種方式也是可行的,浪費點性能,寫起來快捷友善。
3、嵌套模闆
效果:
嵌套模闆是在一個模闆的基礎上,在模闆中繼續使用data-bind的形式利用template嵌套其他模闆,模闆的重新渲染以就近原則為主,最近的模闆資料改變,隻渲染最近的模闆,對于所有的模闆不進行重新渲染。
4、foreach模闆
在模闆中使用foreach完成相應的循環顯示時,有兩種方式,一種使用模闆文法{{each personArray}}這種形式 ,但是這種在性能上不如直接使用data-bind的方式,是以我将直接使用data-bind完成foreach模闆綁定,
對于複雜的模闆來講,需要循環使用如跟帖回帖操作,隻有内容不同、時間不同等等,其他html元素是一樣的,則使用這種方式能大幅提高開發效率。當增加一個Item到fo'reach關聯的數組集合中時,隻會将Item部分進行模闆的重新渲染,其餘已有的部分不影響,
當删除Item項時,模闆不執行渲染,隻是将Item從集合中移除。
5、table模闆
對于table模闆的實際用法與foreach模闆是一樣的,在foreach模闆中也同樣可以看見table模闆的效果展示。
data-bind下template的綁定參數有
name(必選項) — 需要render的模闆ID,可以通過對綁定屬性中值的動态變換,切換不同的模闆使用。
data(可選項) — 需要render到模闆的資料。如果你忽略整個參數,KO将查找foreach參數,或者是應用整個view model對象。
foreach(可選項)— 指定KO按照“foreach”模式render模闆
afterAdd或beforeRemove(可選項) — 在foreach模式下使用callback函數。
templateOptions(可選項) — 在渲染模闆時可傳遞額外資料以便使用,可幫助你使用一些不屬于viewModel過濾條件或者字元來重用模闆。
當然還有其他模闆引擎可以使用,但是就目前來講,個人感覺jquery.tmpl引擎已經滿足我的需求了。
代碼位址:https://gitee.com/530521314/Partner.TreasureChest.git