2014-11-25 32 views
5

所以我試圖添加一個類到一個使用Knockout.js基於是否複選框被選中的元素。爲此,我試圖將this作爲參數傳遞給我的函數。目前,我的刪節DOM結構如下:如何將當前元素傳遞給Knockout.js綁定中的Javascript函數?

<tr data-bind="css: { selected: isRowChecked(this) }"> 
    <td><label><input type="checkbox"></label></td> 
</tr> 

的我isRowChecked功能,這(我使用jQuery來定位輸入):

function isRowChecked(elem) { 
    var checkbox = $(elem).find('input[type="checkbox"]'); 
    return checkbox.checked; 
} 

但是,如果我console.logelem所有我get是全局窗口對象。

使用jQuery完全解決這個問題是不可行的,因爲我正在使用的項目已經幾乎完全使用了淘汰賽。有任何想法嗎?

+1

請不要在您的KO的ViewModels使用jQuery!您應該使用observables和checked綁定來追蹤複選框的選擇時間:http://jsfiddle.net/eqoryb6v/ – nemesv 2014-11-25 06:23:47

+0

@nemesv,好的,這很有幫助,但我有多行,每行都有一個複選框。使用你的方法,當我選擇一個複選框時,*所有*行和複選框被突出顯示。 http://jsfiddle.net/eqoryb6v/1/ – ReactingToAngularVues 2014-11-25 19:30:07

回答

10

您應該可以通過傳遞特殊綁定上下文變量$ element來完成此操作。這是最後一個變量discussed here

$元件

這是元件DOM對象(虛擬元件,這將是 評論DOM對象)當前綁定的。如果一個 綁定需要訪問當前元素的一個屬性,這會很有用。例如:

<div id="item1" data-bind="text: $element.id"></div>

在你的情況,應該是這樣的:

<tr data-bind="css: { selected: isRowChecked($element) }"> 
    <td><label><input type="checkbox"></label></td> 
</tr> 
+0

棒極了。謝謝! – ReactingToAngularVues 2014-11-25 02:33:10

相關問題