KO генерирует таблицу через привязку foreach:
<table>
<thead>
<tr><th>First name</th><th>Last name</th></tr>
</thead>
<tbody data-bind="foreach: people">
<tr>
<td data-bind="text: firstName"></td>
<td data-bind="text: lastName"></td>
</tr>
</tbody>
</table>
Я хочу, чтобы строки были выбраны. В крайнем простом случае я могу сделать это с тремя div и jQuery. Обратите внимание: мне нужно однозначно идентифицировать строку, которая была нажата. В этом примере я делаю это, читая идентификатор.
<div id="row1">Row 1</div>
<div id="row2">Row 2</div>
<div id="row3">Row 3</div>
$('#row1, #row2, #row3').click(function() {
console.log($(this).attr('id') + ' clicked');
$(this).css('background-color','yellow');
});
Когда KO генерирует мой <tr>
как я могу установить уникальное значение для каждой строки?
Добавьте "выбранный" флаг к вашим элементам, которые заполняют <tr>
:
ko.applyBindings({
people: [
{ firstName: 'Bert', lastName: 'Bertington', isSelected: ko.observable(false) },
{ firstName: 'Charles', lastName: 'Charlesforth', isSelected: ko.observable(false) },
{ firstName: 'Denise', lastName: 'Dentiste', isSelected: ko.observable(false) }
]
});
Затем используйте привязку <tr>
используя isSelected
чтобы применить класс css, а также привязку click
для переключения состояния isSelected
(возможно, вам не нужно переключаться - я просто сделал это для этого примера):
<tr data-bind='css: { selected: isSelected }, click: function() { $data.isSelected(!$data.isSelected()); }'>
Зачем вам нужно уникальное значение? Если вам нужно всего лишь выделить строку, вы можете это сделать. http://jsfiddle.net/jayblanchard/d9bE6/4/
$('tr').click(function() {
$(this).css('background-color','yellow');
});
Вы можете установить уникальный идентификатор для каждой строки с помощью.each() -
$('tr').each(function(index) {
$(this).attr('id', index);
});