認識Knockout及如何使用Knockout綁定上下文
Knockout介紹
Knockout簡稱ko,是一個輕量級的javascript類庫,采用MVVM設(shè)計模式(即Model、view、viewModel),簡單優(yōu)雅的實現(xiàn)了雙向綁定,實時更新,幫助您使用干凈的數(shù)據(jù)模型來創(chuàng)建豐富的、響應式的用戶界面。
Knockout有三大核心特性:
1.優(yōu)雅的依賴跟蹤(Elegant dependency tracking):任何時候數(shù)據(jù)模型的變化都會自動更新相應的UI部分;
2.聲明式綁定(Declarative bindings) : 簡單的將UI和你的數(shù)據(jù)模型關(guān)聯(lián)起來,你就可以創(chuàng)建復雜的動態(tài)UI;
3.高度可擴展性(Trivially extensible) : 只需幾行代碼實現(xiàn)一個自定義的行為來作為聲明式綁定;
其他優(yōu)點:
1.純凈的javascript代碼;
2.可以隨時添加到你現(xiàn)有的web應用中;
3.輕量級,GZIP后只有13K;
4.能夠工作于幾乎所有主流瀏覽器((IE 6+, Firefox 2+, Chrome, Safari, Edge, others);
ko采用的是MVVM設(shè)計模式,即model view viewModel。
簡單的例子
There are <span data-bind="text: myItems().length"></span> items
就是這么簡單,你不必寫代碼來更新text內(nèi)容,它會在數(shù)組長度改變時自動更新,與此類似,如果我們想利用數(shù)組長度控制按鈕的可用性僅僅需要:
<button data-bind="enable: myItems().length < 5">Add</button>
下面接著給大家介紹使用Knockout綁定上下文
Binding context
binding context是一個保存數(shù)據(jù)的對象,你可以在你的綁定中引用它。當應用綁定的時候,knockout自動創(chuàng)建和管理binding context的繼承關(guān)系。這種層次結(jié)構(gòu)的根引用你指定的viewModel參數(shù)(ko.applyBindings(viewModel))。
然后每次使用一個控制流如with或者foreach 來創(chuàng)建一個子節(jié)點binding context引用嵌套的viewModel data。
$parent
<h1 data-bind="text: name"></h1> <div data-bind="with: manager"> <!-- Now we're inside a nested binding context --> <span data-bind="text: name"></span> is the manager of <span data-bind="text: $parent.name"></span> </div>
$parents
這是一個數(shù)組,代表了所有的父節(jié)點view models
$parent[0] : 代表父節(jié)點;
$parent[1] : 代表祖父節(jié)點;
$parent[1] : 代表曾祖父節(jié)點;
.....以此類推
$root
它是root context的根節(jié)點視圖模型對象,一般是通過ko.applyBindings指定的,相當于$parents[$parents.length - 1]。
$component
如果你在一個特定的組件模板的上下文中,$component指定的是那個component,它的指定組件相當于$root,在嵌套的組件情況下,它代表了最鄰近的一個組件。
$data
它代表了當前上下文中的viewModel對象,$data和$root是相當?shù)?。在嵌套的binding context中,這個參數(shù)將設(shè)置到當前的數(shù)據(jù)項。
$data是非常有用的,例如,當你想引用viewModel本身而不是viewModel的屬性的時候。
<ul data-bind="foreach: ['cats', 'dogs', 'fish']"> <li>The value is <span data-bind="text: $data"></span></li> </ul> $index(僅在foreach binding中可用)
它是一個在foreach綁定中的數(shù)組的從0開始的索引條目。不想其他的context屬性,$index是observable的,即會隨著數(shù)組item的更新而更新。
$parentContext
指定了父節(jié)點級別的binding context對象,與$parent不同的是,它是在父節(jié)點中指定數(shù)據(jù)而不是binding context。
$rowData
它是在當前上下文中,原viewModel的值,通常它相當于$data,但是,如果viewModel被ko以observable來修飾,$data是unobservable的,而$rowData是observable的。
相關(guān)文章
基于JavaScript實現(xiàn)網(wǎng)紅太空人表盤的完整代碼
這篇文章主要介紹了基于JavaScript實現(xiàn)網(wǎng)紅太空人表盤的完整代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
20170918 前端開發(fā)周報之JS前端開發(fā)必看
本文給大家分享了最新版js 前端開發(fā)周報,內(nèi)容非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-09-09
使用bootstrap實現(xiàn)下拉框搜索功能的實例講解
今天小編就為大家分享一篇使用bootstrap實現(xiàn)下拉框搜索功能的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Javascript中toFixed計算錯誤(依賴銀行家舍入法的缺陷)解決方法
這篇文章主要介紹了Javascript中toFixed計算錯誤(依賴銀行家舍入法的缺陷)解決方法,非常具有實用價值,需要的朋友可以參考下2017-08-08
JS使用百度地圖API自動獲取地址和經(jīng)緯度操作示例
這篇文章主要介紹了JS使用百度地圖API自動獲取地址和經(jīng)緯度操作,結(jié)合實例形式分析了javascript與百度地圖API接口交互實現(xiàn)獲取地址與經(jīng)緯度相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
JS+AJAX實現(xiàn)省市區(qū)的下拉列表聯(lián)動
這篇文章主要為大家詳細介紹了JS+AJAX實現(xiàn)省市區(qū)的下拉列表聯(lián)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Javascript實現(xiàn)真實字符串剩余字數(shù)提示的實例代碼
這篇文章介紹了Javascript實現(xiàn)真實字符串剩余字數(shù)提示的實例代碼,有需要的朋友可以參考一下2013-10-10

