KnockoutJs學習筆記(九)

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   io   strong   for   

由於component binding部分的內容更為複雜一些,所以這部分我暫時跳過,先學習click binding部分。

click binding不僅可以作用於button、input、a等元素,也可以作用於其他任何可見的DOM元素。

下面是一個簡單的例子:

html部分:

1 <div>2     You‘ve clicked <span data-bind="text: numberOfClicks"></span> times3     <button data-bind="click: incrementClickCounter">Click me</button>4 </div>

js部分:

 1 function MyViewModel() { 2     var self = this; 3     self.numberOfClicks = ko.observable(0); 4     self.incrementClickCounter = function() { 5         var previousCount = self.numberOfClicks(); 6         self.numberOfClicks(previousCount + 1); 7     }; 8 } 9 10 ko.applyBindings(new MyViewModel());

這裡需要注意的是numberOfClicks的修改方法。

click binding不僅僅可以綁定viewModel中的方法,也可以綁定其他任意的方法。

注意一:在調用click binding的處理函數時,我們可以給它傳遞一個參數作為當前作用的項(current item),這種操作往往在處理集合或是數組時非常有用。

下面是一個簡單的例子:

html部分:

1 <ul data-bind="foreach: people">2     <li>3         <span data-bind="text: $data"></span>4         <button data-bind="click: $parent.removePerson">Remove</button>5     </li>6 </ul>

js部分:

1 function MyViewModel() {2     var self = this;3     self.people = ko.observableArray([ "Kazusa", "Chiaki", "Charlie" ]);4     self.removePerson = function(person) {5         self.people.remove(person);6     };7 }8 9 ko.applyBindings(new MyViewModel());

注意上例中關於$parent的使用,在使用foreach binding或是with binding時,一定要明確自己能夠直接調用的viewModelProperty的範圍,如果在更高的層次,則要考慮使用$parent或是$root這樣的首碼。

注意二:在某些時候,我們需要擷取與click事件相關聯的DOM event object(說起來聽繞口,我覺得可以直接就說是包含click在內的能夠觸發相應綁定的處理函數的事件),KO將這個事件作為處理函數的第二個參數,比如說我們希望在按下shift鍵的clik與一般的click有所區別,則可以利用這一參數在處理函數中進行區分。

如果我們需要傳遞更多的參數,有以下兩種方式:

1 <button data-bind="click: function(data, event) { myFunction(‘param1‘, ‘param2‘, data, event) }">2     Click me3 </button>
1 <button data-bind="click: myFunction.bind($data, ‘param1‘, ‘param2‘)">2     Click me3 </button>

其中第二種方式用到了bind方法,可以參考function.prototype.bind(),這個留作以後研究。

注意三:在預設情況下,使用click binding會屏蔽掉原先click的預設功能,比如對於一個a元素,在使用click binding之後,並不會跳轉到href所描述的地址。如果我們希望恢複預設的功能,只需要在click binding所綁定的處理函數的最後返回一個true即可。

注意四:在某些時候,我們的html部分可能會存在嵌套的click binding的情況,如下:

1 <div data-bind="click: function1">2     <div data-bind="click: function2">3         <button data-bind="click: function3">Click me</button>4     </div>5 </div>

在這種情況下,如果我們點擊頁面上的button,則會依次觸發function3、function2、function1。為了防止這種現象,我們可以在data-bind後附加clickBubble:false來阻止click事件繼續向上傳遞,比如說我們將代碼改成這樣:

1 <div data-bind="click: function1">2     <div data-bind="click: function2">3         <button data-bind="click: function3, clickBubble: false">Click me</button>4     </div>5 </div>

這樣一來就只會觸發function3。而如果我們是在function2後面添加,則只會依次觸發function3和function2,以此類推。

KnockoutJs學習筆記(九)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.