KnockoutJS 3.X API 第四章之click綁定
目的
click綁定主要作用是用于DOM元素被點(diǎn)擊時(shí)調(diào)用相關(guān)JS函數(shù)。最常見(jiàn)用于button、input、a元素。
例如:
You've clicked 0timesClick me
源碼:
<div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="click: incrementClickCounter">Click me</button> </div> <script type="text/javascript"> var viewModel = { numberOfClicks : ko.observable(0), incrementClickCounter : function() { var previousCount = this.numberOfClicks(); this.numberOfClicks(previousCount + 1); } }; </script>
如上述例子,沒(méi)點(diǎn)過(guò)button被點(diǎn)擊時(shí)都會(huì)觸發(fā)incrementClickCounter 回調(diào)函數(shù),從而更新視圖狀態(tài)。
備注,click后所跟的并不一定非得是視圖模型的函數(shù)。可以是任何對(duì)象的函數(shù),直接引用即可。例如:click: someObject.someFunction。
備注1:傳遞一個(gè)參數(shù)
當(dāng)您的處理程序中,UI展示了一個(gè)監(jiān)控屬性數(shù)組,例如:
LondonRemove
ParisRemove
TokyoRemove
源碼:
<ul data-bind="foreach: places"> <li> <span data-bind="text: $data"></span> <button data-bind="click: $parent.removePlace">Remove</button> </li> </ul> <script type="text/javascript"> function MyViewModel() { var self = this; self.places = ko.observableArray(['London', 'Paris', 'Tokyo']); // The current item will be passed as the first parameter, so we know which place to remove self.removePlace = function(place) { self.places.remove(place) } } ko.applyBindings(new MyViewModel()); </script>
當(dāng)點(diǎn)擊remove時(shí)只會(huì)刪除當(dāng)前的項(xiàng)目,從源碼上看,說(shuō)明傳遞的是當(dāng)前項(xiàng)目。這種在渲染集合數(shù)據(jù)的時(shí)候特別有用。
需要注意兩點(diǎn):
如果你是一個(gè)嵌套在綁定上下文,例如,如果使用foreach或with綁定,但你的處理函數(shù)是根視圖模型或其他一些父模型,你需要使用一個(gè)前綴,如$parent或$root定位處理函數(shù)。
在您的視圖模型,但是這是可以使用self(或其他一些變量)作為this的一個(gè)別名。
備注2:傳遞事件對(duì)象(多參數(shù))
一些情況下,你可能需要訪問(wèn)DOM的事件對(duì)象(event),一般情況下KO會(huì)將事件對(duì)象作為第二個(gè)參數(shù)傳遞給函數(shù)。例如:
<button data-bind="click: myFunction"> Click me </button> <script type="text/javascript"> var viewModel = { myFunction: function(data, event) { if (event.shiftKey) { //do something different when user has shift key down } else { //do normal action } } }; ko.applyBindings(viewModel); </script>
如果你要傳遞更多的參數(shù),可以使用函數(shù)文本的方式。例如:
<button data-bind="click: function(data, event) { myFunction('param1', 'param2', data, event) }"> Click me </button>
還有更優(yōu)雅的寫(xiě)法,比如使用bind函數(shù)綁定多個(gè)參數(shù)。例如:
<button data-bind="click: myFunction.bind($data, 'param1', 'param2')"> Click me </button>
備注3:允許默認(rèn)點(diǎn)擊動(dòng)作
默認(rèn)情況下,Ko會(huì)阻止任何默認(rèn)動(dòng)作。比如你把click綁定到一個(gè)a標(biāo)簽上,當(dāng)點(diǎn)擊時(shí),瀏覽器會(huì)調(diào)用click綁定的回調(diào)函數(shù)。但是不會(huì)執(zhí)行href的連接跳轉(zhuǎn)。
如果你不希望這種默認(rèn)的阻止動(dòng)作??梢栽诨卣{(diào)函數(shù)中返回true。
備注4:防止冒泡事件
默認(rèn)情況下,KO允許click綁定繼續(xù)到任何高級(jí)別的事件處理。例如,父元素和子元素都有click綁定,那么這兩個(gè)元素的click綁定會(huì)都被觸發(fā)。
可以使用一個(gè)附加綁定clickBubble來(lái)解決該問(wèn)題:
<div data-bind="click: myDivHandler"> <button data-bind="click: myButtonHandler, clickBubble: false"> Click me </button> </div>
如上述例子,myButtonHandler將被調(diào)用,而附件綁定clickBubble,并設(shè)置了false,這至使父元素的myDivHandler不會(huì)被調(diào)用。
備注5:與Jquery互動(dòng)
如果存在Jquery的click事件,KO將會(huì)去調(diào)用Jquery的click事件,如果你想總是使用自己本地的事件來(lái)處理,可以在ko.applyBindings中加入如下代碼:
ko.options.useOnlyNativeEvents = true;
以上所述是小編給大家介紹的KnockoutJS 3.X API 第四章之click綁定,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- KnockoutJS 3.X API 第四章之?dāng)?shù)據(jù)控制流foreach綁定
- KnockoutJS 3.X API 第四章之?dāng)?shù)據(jù)控制流if綁定和ifnot綁定
- KnockoutJS 3.X API 第四章之?dāng)?shù)據(jù)控制流with綁定
- KnockoutJS 3.X API 第四章之?dāng)?shù)據(jù)控制流component綁定
- KnockoutJS 3.X API 第四章之事件event綁定
- KnockoutJS 3.X API 第四章之表單submit、enable、disable綁定
- KnockoutJS 3.X API 第四章之表單value綁定
- BootstrapTable與KnockoutJS相結(jié)合實(shí)現(xiàn)增刪改查功能【二】
- BootstrapTable與KnockoutJS相結(jié)合實(shí)現(xiàn)增刪改查功能【一】
- KnockoutJS 3.X API 第四章之表單textInput、hasFocus、checked綁定
相關(guān)文章
js動(dòng)態(tài)添加刪除,后臺(tái)取數(shù)據(jù)(示例代碼)
這篇文章主要是對(duì)js動(dòng)態(tài)添加刪除,后臺(tái)取數(shù)據(jù)(示例代碼)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11JavaScript 獲取/設(shè)置光標(biāo)位置,兼容Input&&TextArea
JavaScript 獲取/設(shè)置光標(biāo)位置,兼容Input&&TextArea:項(xiàng)目中遇到的問(wèn)題,特此記錄。2011-01-01javascript游戲開(kāi)發(fā)之《三國(guó)志曹操傳》零部件開(kāi)發(fā)(一)讓靜態(tài)人物動(dòng)起來(lái)
首先來(lái)說(shuō),讓一個(gè)游戲賦有可玩性必須要?jiǎng)屿o結(jié)合,我將要在下面告訴大家如何運(yùn)用Javascript將靜態(tài)圖片變?yōu)閯?dòng)態(tài)圖片,感興趣的朋友可以了解下,便當(dāng)鞏固js知識(shí)了2013-01-01詳解JS鼠標(biāo)事件中clientX/screenX/offsetX/pageX屬性的區(qū)別
在熟悉業(yè)務(wù)中播放器功能的時(shí)候,發(fā)現(xiàn)時(shí)間軸上綁定了點(diǎn)擊和拖動(dòng)事件,頻繁遇到了類(lèi)似pageX之類(lèi)的事件屬性,所以本文就來(lái)和大家詳細(xì)聊聊clientX/screenX/offsetX/pageX等屬性的區(qū)別吧2024-03-03js+CSS實(shí)現(xiàn)模擬華麗的select控件下拉菜單效果
這篇文章主要介紹了js+CSS模擬select控件下拉菜單效果,通過(guò)javascript鼠標(biāo)事件結(jié)合css控制實(shí)現(xiàn)select下拉菜單效果,整體效果華麗美觀,需要的朋友可以參考下2015-09-09ES6學(xué)習(xí)教程之Map的常用方法總結(jié)
Map 是 ES6 中新增的一種數(shù)據(jù)結(jié)構(gòu),與 Set 一起添加,其實(shí)功能都差不多。下面這篇文章主要給大家總結(jié)介紹了關(guān)于ES6學(xué)習(xí)教程之Map的常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08javascript for循環(huán)從入門(mén)到偏門(mén)(效率優(yōu)化+奇特用法)
for循環(huán)是非?;A(chǔ)的javascript知識(shí),但由于JS太靈活了,所以可能出現(xiàn)一些讓初學(xué)者崩潰的寫(xiě)法。我決定由淺入深的解釋一下for循環(huán),算是給比我還新手的新手解惑吧,少走彎路2012-08-08JavaScript高級(jí)程序設(shè)計(jì) 閱讀筆記(十二) js內(nèi)置對(duì)象Math
js內(nèi)置對(duì)象Math使用介紹, 需要的朋友可以參考下2012-08-08