所謂繫結上下文就是當前繫結(dat-bind)所使用到的物件(viewmodel)。在單個物件繫結的情況下是很容易理解的,但物件可能是複雜的型別,巢狀很多層,這個時候每層都有自己的上下文物件,理解起來就不是很方便了。ko通過上下文關鍵字,讓層次間的關係變得更加清晰,相互訪問變得更加簡單。
一、$data 與 $index
介紹了observablearray和template,通常我們通過物件屬性進行繫結,例如:data-bind="text:屬性名稱";但如果陣列只是簡單格式呢,例如["tom","jack","lucy"],這個時候可以用ko的幾個上下文來實現。
$data 表示當前物件。下面的$data就表示 person物件。
姓名:,年齡:function person(name,age)
var person = new person("tom",18);
而對於["tom","jack","lucy"] 陣列,$data 就是每個項的值。
$index 表示當前下標。例子:
var arr = ["tom","jack","lucy"];
二、$parent、$parents、$root
$parent 表示父viewmodel。例如:
var data = [
,]},
,]}];
內部的 ul 的viewmodel是 contains 物件,之前我們用as 指定別名來訪問data[i]的name屬性,這裡也可以直接通過$parent.name訪問上層的viewmodel的name屬性。
$parents 表示所有父viewmodel集合。這是乙個陣列,$parents[0] 就是父viewmodel,也就是 $parent;$parenrs[1] 就是父的父viewmodel...。
$root 表示根viewmodel。上面的例子,$parent 和 $root 是一樣的,都表示 data 物件。如第乙個例子,如果此時是在根部的話,那麼 $root 與 $data 就是一樣的。
三、$parentcontext
表示上層的具體資料。$parent表示父viewmodel,$parentcontext.$data 就可以訪問這個viewmodel。如果要獲得父 $index,則必須通過$parentcontext.$index。
四、with 關鍵字
指定當前上下文,例如:
這樣就不用老是寫 info.name,info.age 了,在資料複雜時,可以簡寫**。
五、總結
以上就是ko上下文幾個常用的關鍵字,$data, $index, $parent, $root 在複雜資料型別時特別有用; with 關鍵字在屬性多的時候可以簡寫**,通過指明當前上下文,讓語義更加清晰,閱讀起來更加方便。
C PRIMER PLUS 學習筆記(0)
總之,從今天開始,我就算正式學習程式設計了。寫部落格主要還是彌補我差的可怕的記憶力,把自己的一些在看書時的想法記下來。哼,老子坐等腦機介面成熟的那一天,我看誰還背書 說實話,學了c 我才發現,我是所有語言都不想學,好在程式語言看上去結構比英語簡單點。本人懶的一批,之前的不想記,就從書的4.4開始吧。...
SAS PROC TABULATE學習筆記01
sas中的proc tabulate功能比較強大,使用好了能節約不少時間而且不易出錯。一句話 a procedure that displays descriptive statistics in tabular format。其中descriptive statistics可以理解為描述統計學,描...
關於 knockout js 學習中的疑問 (1)
最近剛剛學習knockout中遇到如下問題 1.在給viewmodel定義乙個方法時,有時後面跟 的this,有的時候沒有 如下所示 this.fullname ko.computed function this this.capitalizelastname function 第乙個呼叫ko.co...