新聞中心
第三章所有代碼都需要啟用KO的ko.applyBindings(viewModel);功能,才能使代碼生效,為了節(jié)約篇幅,所有例子均省略了此行代碼。

創(chuàng)新互聯(lián)公司是專業(yè)的西湖網(wǎng)站建設(shè)公司,西湖接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行西湖網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
1 visible 綁定
目的
visible綁定到DOM元素上,使得該元素的hidden或visible狀態(tài)取決于綁定的值。
例子
- You will see this message only when "shouldShowMessage" holds a true value.
參數(shù)
主參數(shù)
當(dāng)參數(shù)設(shè)置為一個假值時(例如:布爾值false, 數(shù)字值0, 或者null, 或者undefined) ,該綁定將設(shè)置該元素的style.display值為none,讓元素隱藏。它的優(yōu)先級高于你在CSS里定義的任何display樣式。
當(dāng)參數(shù)設(shè)置為一個真值時(例如:布爾值true,或者非空non-null的對象或者數(shù)組) ,該綁定會刪除該元素的style.display值,讓元素可見。然后你在CSS里自定義的display樣式將會自動生效。
如果參數(shù)是監(jiān)控屬性observable的,那元素的visible狀態(tài)將根據(jù)參數(shù)值的變化而變化,如果不是,那元素的visible狀態(tài)將只設(shè)置一次并且以后不在更新。
其它參數(shù)
無
注:使用函數(shù)或者表達式來控制元素的可見性
你也可以使用JavaScript函數(shù)或者表達式作為參數(shù)。這樣的話,函數(shù)或者表達式的結(jié)果將決定是否顯示/隱藏這個元素。例如:
0">- You will see this message only when 'myValues' has at least one member.
依賴性
除KO核心類庫外,無依賴。
2 text 綁定
目的
text 綁定到DOM元素上,使得該元素顯示的文本值為你綁定的參數(shù)。該綁定在顯示或者上非常有用,但是你可以用在任何元素上。
例子
- Today's message is:
參數(shù)
主參數(shù)
KO將參數(shù)值會設(shè)置在元素的innerText (IE)或textContent(Firefox和其它相似瀏覽器)屬性上。原來的文本將會被覆蓋。
如果參數(shù)是監(jiān)控屬性observable的,那元素的text文本將根據(jù)參數(shù)值的變化而更新,如果不是,那元素的text文本將只設(shè)置一次并且以后不在更新。
如果你傳的是不是數(shù)字或者字符串(例如一個對象或者數(shù)組),那顯示的文本將是yourParameter.toString()的等價內(nèi)容。
其它參數(shù)
無
注1:使用函數(shù)或者表達式來決定text值
如果你想讓你的text更可控,那選擇是創(chuàng)建一個依賴監(jiān)控屬性(dependent observable),然后在它的執(zhí)行函數(shù)里編碼,決定應(yīng)該顯示什么樣的text文本。
例如:
- The item is today.
現(xiàn)在,text文本將在“expensive”和“affordable”之間替換,取決于價格怎么改變。
然而,如果有類似需求的話其實沒有必要再聲明一個依賴監(jiān)控屬性(dependent observable), 你只需要按照如下代碼寫JavaScript表達式就可以了:
- The item is 50 ? 'expensive' : 'affordable'"> today.
結(jié)果是一樣的,但我們不需要再聲明依賴監(jiān)控屬性(dependent observable)。
注2:關(guān)于HTML encoding
因為該綁定是設(shè)置元素的innerText或textContent (而不是innerHTML),所以它是安全的,沒有HTML或者腳本注入的風(fēng)險。例如:如果你編寫如下代碼:
- viewModel.myMessage("Hello, world!");
… 它不會顯示斜體字,而是原樣輸出標簽。如果你需要顯示HTML內(nèi)容,請參考html綁定.
注3:關(guān)于IE 6的白空格whitespace
IE6有個奇怪的問題,如果 span里有空格的話,它將自動變成一個空的span。如果你想編寫如下的代碼的話,那Knockout將不起任何作用:
- Welcome, to our web site.
… IE6 將不會顯示span中間的那個空格,你可以通過下面這樣的代碼避免這個問題:
- Welcome, to our web site.
IE6以后版本和其它瀏覽器都沒有這個問題
依賴性
除KO核心類庫外,無依賴。
#p#
3 html 綁定
目的
html綁定到DOM元素上,使得該元素顯示的HTML值為你綁定的參數(shù)。如果在你的view model里聲明HTML標記并且render的話,那非常有用。
例子
參數(shù)
主參數(shù)
KO設(shè)置該參數(shù)值到元素的innerHTML屬性上,元素之前的內(nèi)容將被覆蓋。
如果參數(shù)是監(jiān)控屬性observable的,那元素的內(nèi)容將根據(jù)參數(shù)值的變化而更新,如果不是,那元素的內(nèi)容將只設(shè)置一次并且以后不在更新。
如果你傳的是不是數(shù)字或者字符串(例如一個對象或者數(shù)組),那顯示的文本將是yourParameter.toString()的等價內(nèi)容。
其它參數(shù)
無
注:關(guān)于HTML encoding
因為該綁定設(shè)置元素的innerHTML,你應(yīng)該注意不要使用不安全的HTML代碼,因為有可能引起腳本注入攻擊。如果你不確信是否安全(比如顯示用戶輸入的內(nèi)容),那你應(yīng)該使用text綁定,因為這個綁定只是設(shè)置元素的text 值innerText和textContent。
依賴性
除KO核心類庫外,無依賴。
4 css 綁定
目的
css綁定是添加或刪除一個或多個CSS class到DOM元素上。 非常有用,比如當(dāng)數(shù)字變成負數(shù)時高亮顯示。(注:如果你不想應(yīng)用CSS class而是想引用style屬性的話,請參考style綁定。)
例子
- Profit Information
效果就是當(dāng)currentProfit 小于0的時候,添加profitWarning CSS class到元素上,如果大于0則刪除這個CSS class。
參數(shù)
主參數(shù)
該參數(shù)是一個JavaScript對象,屬性是你的CSS class名稱,值是比較用的true或false,用來決定是否應(yīng)該使用這個CSS class。
你可以一次設(shè)置多個CSS class。例如,如果你的view model有一個叫isServre的屬性,
非布爾值會被解析成布爾值。例如, 0和null被解析成false,21和非null對象被解析成true。
如果參數(shù)是監(jiān)控屬性observable的,那隨著值的變化將會自動添加或者刪除該元素上的CSS class。如果不是,那CSS class將會只添加或者刪除一次并且以后不在更新。
你可以使用任何JavaScript表達式或函數(shù)作為參數(shù)。KO將用它的執(zhí)行結(jié)果來決定是否應(yīng)用或刪除CSS class。
其它參數(shù)
無
注:應(yīng)用的CSS class的名字不是合法的JavaScript變量命名
如果你想使用my-class class,你不能寫成這樣:
...… 因為my-class不是一個合法的命名。解決方案是:在my-class兩邊加引號作為一個字符串使用。這是一個合法的JavaScript 對象 文字(從JSON技術(shù)規(guī)格說明來說,你任何時候都應(yīng)該這樣使用,雖然不是必須的)。例如,
依賴性
除KO核心類庫外,無依賴。
5 style 綁定
目的
style綁定是添加或刪除一個或多個DOM元素上的style值。比如當(dāng)數(shù)字變成負數(shù)時高亮顯示,或者根據(jù)數(shù)字顯示對應(yīng)寬度的Bar。(注:如果你不是應(yīng)用style值而是應(yīng)用CSS class的話,請參考CSS綁定。)
例子
- Profit Information
當(dāng)currentProfit 小于0的時候div的style.color是紅色,大于的話是黑色。
參數(shù)
主參數(shù)
該參數(shù)是一個JavaScript對象,屬性是你的style的名稱,值是該style需要應(yīng)用的值。
你可以一次設(shè)置多個style值。例如,如果你的view model有一個叫isServre的屬性,
...如果參數(shù)是監(jiān)控屬性observable的,那隨著值的變化將會自動添加或者刪除該元素上的style值。如果不是,那style值將會只應(yīng)用一次并且以后不在更新。
你可以使用任何JavaScript表達式或函數(shù)作為參數(shù)。KO將用它的執(zhí)行結(jié)果來決定是否應(yīng)用或刪除style值。
其它參數(shù)
無
注:應(yīng)用的style的名字不是合法的JavaScript變量命名
如果你需要應(yīng)用font-weight或者text-decoration,你不能直接使用,而是要使用style對應(yīng)的JavaScript名稱。
錯誤: { font-weight: someValue }; 正確: { fontWeight: someValue }
錯誤: { text-decoration: someValue }; 正確: { textDecoration: someValue }
參考:style名稱和對應(yīng)的JavaScript 名稱列表。
依賴性
除KO核心類庫外,無依賴。
6 attr 綁定
目的
attr 綁定提供了一種方式可以設(shè)置DOM元素的任何屬性值。你可以設(shè)置img的src屬性,連接的href屬性。使用綁定,當(dāng)模型屬性改變的時候,它會自動更新。
例子
呈現(xiàn)結(jié)果是該連接的href屬性被設(shè)置為year-end.html, title屬性被設(shè)置為Report including final year-end statistics。
參數(shù)
主參數(shù)
該參數(shù)是一個JavaScript對象,屬性是你的attribute名稱,值是該attribute需要應(yīng)用的值。
如果參數(shù)是監(jiān)控屬性observable的,那隨著值的變化將會自動添加或者刪除該元素上的attribute值。如果不是,那attribute值將會只應(yīng)用一次并且以后不在更新。
其它參數(shù)
無
注:應(yīng)用的屬性名字不是合法的JavaScript變量命名
如果你要用的屬性名稱是data-something的話,你不能這樣寫:
...… 因為data-something 不是一個合法的命名。解決方案是:在data-something兩邊加引號作為一個字符串使用。這是一個合法的JavaScript 對象 文字(從JSON技術(shù)規(guī)格說明來說,你任何時候都應(yīng)該這樣使用,雖然不是必須的)。例如,
...依賴性
除KO核心類庫外,無依賴。
#p#
7 click 綁定
目的
click綁定在DOM元素上添加事件句柄以便元素被點擊的時候執(zhí)行定義的JavaScript 函數(shù)。大部分是用在button,input和連接a上,但是可以在任意元素上使用。
例子
- You've clicked times
每次點擊按鈕的時候,都會調(diào)用incrementClickCounter()函數(shù),然后更新自動更新點擊次數(shù)。
參數(shù)
主參數(shù)
Click點擊事件時所執(zhí)行的函數(shù)。
你可以聲明任何JavaScript函數(shù) – 不一定非要是view model里的函數(shù)。你可以聲明任意對象上的任何函數(shù),例如: someObject.someFunction。
View model上的函數(shù)在用的時候有一點點特殊,就是不需要引用對象的,直接引用函數(shù)本身就行了,比如直接寫incrementClickCounter 就可以了,而無需寫成: viewModel.incrementClickCounter(盡管是合法的)。
其它參數(shù)
無
注1:傳參數(shù)給你的click 句柄
最簡單的辦法是傳一個function包裝的匿名函數(shù):
- Click me
這樣,KO就會調(diào)用這個匿名函數(shù),里面會執(zhí)行viewModel.myFunction(),并且傳進了'param1' 和'param2'參數(shù)。
注2:訪問事件源對象
有些情況,你可能需要使用事件源對象,Knockout會將這個對象傳遞到你函數(shù)的第一個參數(shù):
- Click me
如果你需要的話,可以使用匿名函數(shù)的第一個參數(shù)傳進去,然后在里面調(diào)用:
- Click me
這樣,KO就會將事件源對象傳遞給你的函數(shù)并且使用了。
注3: 允許執(zhí)行默認事件
默認情況下,Knockout會阻止冒泡,防止默認的事件繼續(xù)執(zhí)行。例如,如果你點擊一個a連接,在執(zhí)行完自定義事件時它不會連接到href地址。這特別有用是因為你的自定義事件主要就是操作你的view model,而不是連接到另外一個頁面。
當(dāng)然,如果你想讓默認的事件繼續(xù)執(zhí)行,你可以在你click的自定義函數(shù)里返回true。
注4:控制this句柄
初學(xué)者可以忽略這小節(jié),因為大部分都用不著,高級用戶可以參考如下內(nèi)容:
KO在調(diào)用你定義的函數(shù)時,會將view model傳給this對象(也就是ko.applyBindings使用的view model)。主要是方便你在調(diào)用你在view model里定義的方法的時候可以很容易再調(diào)用view model里定義的其它屬性。例如: this.someOtherViewModelProperty。
如果你想引用其它對象,我們有兩種方式:
◆ 你可以和注1里那樣使用匿名函數(shù),因為它支持任意JavaScript 對象。
◆ 你也可以直接引用任何函數(shù)對象。你可以使用bind使callback函數(shù)設(shè)置this為任何你選擇的對象。例如:
- Click me
如果你是C#或Java開發(fā)人員,你可以疑惑為什么我們還要用bind函數(shù)到一個對象想,特別是像調(diào)用someObject.someFunction。 原因是在JavaScript里,函數(shù)自己不是類的一部分,他們在單獨存在的對象,有可能多個對象都引用同樣的someFunction函數(shù),所以當(dāng)這個函數(shù)被調(diào)用的時候它不知道誰調(diào)用的(設(shè)置this給誰)。在你bind之前運行時是不會知道的。KO默認情況下設(shè)置this對象是view model,但你可以用bind語法重定義它。
在注1里使用匿名函數(shù)的時候沒有具體的要求,因為JavaScript代碼 someObject.someFunction()就意味著調(diào)用someFunction,然后設(shè)置this到 someObject對象上。
注5:防止事件冒泡
默認情況下,Knockout允許click事件繼續(xù)在更高一層的事件句柄上冒泡執(zhí)行。例如,如果你的元素和父元素都綁定了click事件,那當(dāng)你點擊該元素的時候兩個事件都會觸發(fā)的。如果需要,你可以通過額外的綁定clickBubble來禁止冒泡。例如:
- Click me
默認情況下,myButtonHandler會先執(zhí)行,然后會冒泡執(zhí)行myDivHandler。但一旦你設(shè)置了clickBubble為false的時候,冒泡事件會被禁止。
依賴性
除KO核心類庫外,無依賴。
#p#
8 event 綁定
目的
event綁定在DOM元素上添加指定的事件句柄以便元素被觸發(fā)的時候執(zhí)行定義的JavaScript 函數(shù)。大部分情況下是用在keypress,mouseover和mouseout上。
例子
- Mouse over me
- Details
每次鼠標在第一個元素上移入移出的時候都會調(diào)用view model上的方法來toggle detailsEnabled的值,而第二個元素會根據(jù)detailsEnabled的值自動顯示或者隱藏。
參數(shù)
主參數(shù)
你需要傳入的是一個JavaScript對象,他的屬性名是事件名稱,值是你所需要執(zhí)行的函數(shù)。
你可以聲明任何JavaScript函數(shù) – 不一定非要是view model里的函數(shù)。你可以聲明任意對象上的任何函數(shù),例如: event: { mouseover: someObject.someFunction }。
View model上的函數(shù)在用的時候有一點點特殊,就是不需要引用對象的,直接引用函數(shù)本身就行了,比如直接寫event: { mouseover: enableDetails } 就可以了,而無需寫成: event: { mouseover: viewModel.enableDetails } (盡管是合法的)。
其它參數(shù)
無
9 submit 綁定
目的
submit綁定在form表單上添加指定的事件句柄以便該form被提交的時候執(zhí)行定義的JavaScript 函數(shù)。只能用在表單form元素上。
當(dāng)你使用submit綁定的時候, Knockout會阻止form表單默認的submit動作。換句話說,瀏覽器會執(zhí)行你定義的綁定函數(shù)而不會提交這個form表單到服務(wù)器上??梢院芎玫亟忉屵@個,使用submit綁定就是為了處理view model的自定義函數(shù)的,而不是再使用普通的HTML form表單。如果你要繼續(xù)執(zhí)行默認的HTML form表單操作,你可以在你的submit句柄里返回true。
例子
- ... form contents go here ...
這個例子里,KO將把整個form表單元素作為參數(shù)傳遞到你的submit綁定函數(shù)里。 你可以忽略不管,但是有些例子里是否有用,參考:ko.postJson工具。
為什么不在submit按鈕上使用click綁定?
在form上,你可以使用click綁定代替submit綁定。不過submit可以handle其它的submit行為,比如在輸入框里輸入回車的時候可以提交表單。
參數(shù)
主參數(shù)
你綁定到submit事件上的函數(shù)
你可以聲明任何JavaScript函數(shù) – 不一定非要是view model里的函數(shù)。你可以聲明任意對象上的任何函數(shù),例如: submit: someObject.someFunction。
View model上的函數(shù)在用的時候有一點點特殊,就是不需要引用對象的,直接引用函數(shù)本身就行了,比如直接寫submit: doSomething就可以了,而無需寫成: submit: viewModel. doSomething(盡管是合法的)。
其它參數(shù)
無
備注:
關(guān)于如果傳遞更多的參數(shù)給submit綁定函數(shù),或者當(dāng)調(diào)用非view model里的函數(shù)的時如何控制this,請參考click綁定。所有click綁定相關(guān)的notes也都適用于submit綁定。
依賴性
除KO核心類庫外,無依賴。
10 enable 綁定
目的
enable綁定使DOM元素只有在參數(shù)值為 true的時候才enabled。在form表單元素input,select,和textarea上非常有用。
例子
- I have a cellphone
- Your cellphone number:
這個例子里,“Your cellphone number”后的text box 初始情況下是禁用的,只有當(dāng)用戶點擊標簽 “I have a cellphone”的時候才可用。
參數(shù)
主參數(shù)
聲明DOM元素是否可用enabled。
非布爾值會被解析成布爾值。例如0和null被解析成false,21和非null對象被解析給true。
如果你的參數(shù)是observable的,那綁定會隨著observable值的改變而自動更新enabled/disabled狀態(tài)。如果不是,則只會設(shè)置一次并且以后不再更新。
其它參數(shù)
無
注:任意使用JavaScript表達式
不緊緊限制于變量 – 你可以使用任何JavaScript表達式來控制元素是否可用。例如,
- Do something
依賴性
除KO核心類庫外,無依賴。
11 disable 綁定
目的
disable綁定使DOM元素只有在參數(shù)值為 true的時候才disabled。在form表單元素input,select,和textarea上非常有用。
disable綁定和enable綁定正好相反,詳情請參考enable綁定。
#p#
12 value 綁定
目的
value綁定是關(guān)聯(lián)DOM元素的值到view model的屬性上。主要是用在表單控件,
當(dāng)用戶編輯表單控件的時候, view model對應(yīng)的屬性值會自動更新。同樣,當(dāng)你更新view model屬性的時候,相對應(yīng)的元素值在頁面上也會自動更新。
注:如果你在checkbox或者radio button上使用checked綁定來讀取或者寫入元素的 checked狀態(tài),而不是value 值的綁定。
例子
Login name:
Password:
參數(shù)
主參數(shù)
KO設(shè)置此參數(shù)為元素的value值。之前的值將被覆蓋。
如果參數(shù)是監(jiān)控屬性observable的,那元素的value值將根據(jù)參數(shù)值的變化而更新,如果不是,那元素的value值將只設(shè)置一次并且以后不在更新。
如果你提供的參數(shù)不是一個數(shù)字或者字符串(而是對象或者數(shù)組)的話,那顯示的value值就是yourParameter.toString() 的內(nèi)容(通常沒用,所以最好都設(shè)置為數(shù)字或者字符串)。
不管什么時候,只要你更新了元素的值,那 KO都會將view model對應(yīng)的屬性值自動更新。默認情況下當(dāng)用戶離開焦點(例如onchange事件)的時候,KO才更新這個值,但是你可以通過第2個參數(shù)valueUpdate來特別指定改變值的時機。
其它參數(shù)
valueUpdate
如果你使用valueUpdate參數(shù),那就是意味著KO將使用自定義的事件而不是默認的離開焦點事件。下面是一些最常用的選項:
“change”(默認值)- 當(dāng)失去焦點的時候更新view model的值,或者是
“keyup”– 當(dāng)用戶敲完一個字符以后立即更新view model。
“keypress”– 當(dāng)用戶正在敲一個字符但沒有釋放鍵盤的時候就立即更新view model。不像 keyup,這個更新和keydown是一樣的。
“afterkeydown”– 當(dāng)用戶開始輸入字符的時候就更新view model。主要是捕獲瀏覽器的keydown事件或異步handle事件。
上述這些選項,如果你想讓你的view model進行實時更新,使用“afterkeydown”是最好的選擇。
例子:
Your value:
You have typed:
注1:綁定下拉菜單drop-down list(例如SELECT)
Knockout對下拉菜單drop-down list綁定有一個特殊的支持,那就是在讀取和寫入綁定的時候,這個值可以是任意JavaScript對象,而不必非得是字符串。在你讓你用戶選擇一組model對象的時候非常有用。具體例子,參考options綁定。
類似,如果你想創(chuàng)建一個multi-select list,參考selectedOptions綁定。
注2:更新observable和non-observable屬性值
如果你用value綁定將你的表單元素和你的observable屬性關(guān)聯(lián)起來,KO設(shè)置的2-way的雙向綁定,任何一方改變都會更新另外一方的值。
但是,如果你的元素綁定的是一個non-observable屬性(例如是一個原始的字符串或者JavaScript表達式) ,KO會這樣執(zhí)行:
◆ 如果你綁定的non-observable屬性是簡單對象,例如一個常見的屬性值,KO會設(shè)置這個值為form表單元素的初始值,如果你改變form表單元素的值,KO會將值重新寫回到view mode的這個屬性。但當(dāng)這個屬性自己改變的時候,元素卻不會再變化了(因為不是observable的),所以它僅僅是1-way綁定。
◆ 如果你綁定的non-observable屬性是復(fù)雜對象,例如復(fù)雜的JavaScript 表達式或者子屬性,KO也會設(shè)置這個值為form表單元素的初始值,但是改變form表單元素的值的時候,KO不會再寫會view model屬性,這種情況叫one-time-only value setter,不是真正的綁定。
例子:
First value:
Second value:
Third value:
依賴性
除KO核心類庫外,無依賴。
13 checked 綁定
目的
checked綁定是關(guān)聯(lián)到checkable的form表單控件到view model上 - 例如checkbox()或者radio button() 。當(dāng)用戶check關(guān)聯(lián)的form表單控件的時候,view model對應(yīng)的值也會自動更新,相反,如果view model的值改變了,那控件元素的check/uncheck狀態(tài)也會跟著改變。
注:對text box,drop-down list和所有non-checkable的form表單控件,用value綁定來讀取和寫入是該元素的值,而不是checked綁定。
例子
Send me spam:
Checkbox關(guān)聯(lián)到數(shù)組
Send me spam:
- Preferred flavors of spam:
Cherry Almond Monosodium Glutamate
添加radio button
Send me spam:
- Preferred flavor of spam:
Cherry Almond Monosodium Glutamate
網(wǎng)站鏈接:http://m.5511xx.com/article/cdgdjeo.html


咨詢
建站咨詢
