2014-06-20 27 views
0

我想知道用戶導航到或單擊的表格中的哪一行。可能在Knockout中使用hasFocus綁定來確定表格當前行索引

Knockout的hasFocus綁定可用於跟蹤當前行索引,這樣在視圖模型內部我可以根據需要獲取該行索引值?

表填充以這種方式:

<tbody data-bind="foreach: sitesList"> 
     <tr> 
      <td data-bind ... > </td> 
      <td data-bind ... > </td> 
       . 
       . 
       . 

       et cetera 

回答

1

有可能是一個更好的辦法做到這一點,但...

HTML:

<table> 
    <tbody data-bind="foreach: sitesList"> 
     <tr data-bind="event: { focusout: $parent.updateSelectedRow }"> 
      <td data-bind="text: $data"></td> 
     </tr> 
    </tbody> 
</table> 

Index: <span data-bind="text: selectedRowIndex"></span> 

JS:

function ViewModel() 
{ 
    var self = this; 
    self.selectedRowIndex = ko.observable(); 
    self.sitesList = ko.observableArray(["google.com", "bing.com", "yahoo.com"]); 

    self.updateSelectedRow = function(row) 
    { 
     self.selectedRowIndex(self.sitesList.indexOf(row)); 
    }; 
} 

ko.applyBindings(new ViewModel()); 

這是要演示它的工作小提琴鏈接:http://jsfiddle.net/TrueEddie/L3YP4/2/

編輯:

改成了使用事件綁定。我用mouseenter處理了它。也許你可以使用onfocus事件呢?

+0

它不捕獲TAB鍵導航。 – Tim

+0

更改爲使用事件綁定。適用於mouseenter。 – TrueEddie

+0

感謝這兩個建議,但事件:mouseenter不能可靠地用TAB鍵導航工作, - 隨後更改的位置沒有被記錄。當用戶將鼠標移動到頁面以達到特定行時,它也會不必要地多次觸發。 – Tim