У меня есть столбец в таблице с нокаутирующими x-редактируемыми значениями привязки. После загрузки страницы и в результате привязки ko для каждой строки вызывается обработчик успеха (и это нормально, я могу этого избежать). Но как только страница настроена, и я продолжаю и изменяю значение (устанавливаю любой из EmployeeId строки на 7-значное число), обработчик успеха больше не вызывается. Посмотрите эту скрипту с открытым журналом консоли:
http://jsfiddle.net/csabatoth/y3rfe6Lw/6/
HTML:
<table style="table table-striped">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Employee ID</td>
</tr>
</thead>
<tbody data-bind="foreach: candidates">
<tr>
<td><span data-bind="text: firstName"></span></td>
<td><span data-bind="text: lastName"></span></td>
<td><span data-bind="editable: employeeId, editableOptions: { validate: $root.validateEmployeeId, success: $root.persistEmployeeId($data) }"></span></td>
</tr>
</tbody>
</table>
JS:
$(document).ready(function () {
function AppViewModel() {
var self = this;
self.validateEmployeeId = function (value) {
if (value == null || !value.match(/^\d{7}$/))
return 'Invalid EmployeeID';
}
self.persistEmployeeId = function (data) {
console.log(data.employeeId);
}
self.candidates = ko.observableArray([
{ firstName: "John", lastName: "Dow", employeeId: 1001, applicantId: 1 },
{ firstName: "Jane", lastName: "Doe", employeeId: 1002, applicantId: 2 },
{ firstName: "Foo", lastName: "Bar", employeeId: 1003, applicantId: 3 }
]);
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
});
Однако мне нужно сохранить изменение данных. Я попытался обойти эту проблему, сделав employeeId ko.observable и подписавшись на событие его изменения. Но с подпиской я получаю только новое значение в качестве параметра. Мне понадобится строка данных и идентификатор заявителя из нее. СотрудникId может быть не уникальным, и мне нужно, чтобы вызов API сохраняемости требовал идентификатора заявителя и сотрудника.
Как я могу это решить?