1
我有一個表中的列與敲除x可編輯的綁定值。在頁面加載和ko綁定後,每行都會調用成功處理程序(這很好,我可以避免這種情況)。但是,一旦頁面設置好了,我繼續前進並更改一個值(將行的employeeId中的任何一個設置爲7位數字),則不會再調用成功處理程序。看到這個撥弄打開控制檯日誌:Knockout X可編輯成功處理程序不叫
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和訂閱它的更改事件來解決此問題。但是,訂閱我只收到newValue作爲參數。我需要數據行和申請人ID。 employeeId可能不是唯一的,我需要持久性API調用需要applicantId和employeeId。
我該如何解決這個問題?
哦, 好。所以我將行封裝到一個申請人「對象」中,然後我可以使用self來引用申請人。我會去做。我仍然想知道爲什麼成功處理程序停止工作。 – 2015-01-10 02:31:30
因爲您錯誤地分配它而停止工作。您不能使用成功:$ root.persistEmployeeId($ data)它需要成功:$ root.persistEmployeeId。根據文檔,你只能得到新的值,這全是 – 2015-01-10 02:34:10
嗯,但是如果你看看控制檯日誌,三個通知在開始時到達,攜帶$數據。那麼爲什麼它的工作一段時間呢?無論如何... – 2015-01-10 07:01:19