У меня возникла проблема с проверкой привязки нокаутом. Кажется, что событие "change" на флажке возвращает старое значение, прежде чем оно будет обновлено (поэтому, если оно не было отмечено, оно вернет false). Я не думаю, что могу подписаться на значение, так как у меня есть его внутри объекта.
<tbody data-bind="foreach: Categories">
<tr>
<td><input type="checkbox" data-bind="checked: ShowOpened, event: { change: $root.CategoryChange }" /></td>
</tr>
</tbody>
<script type="text/javascript">
var Category = function (Id, Name, Order, ShowOpened) {
this.Id = Id;
this.Name = Name;
this.Order = Order;
this.ShowOpened = ShowOpened;
this.IsUpdated = ko.observable(false);
this.OldOrder = Order;
this.OldShowOpened = ShowOpened;
};
var ViewModel = {
Categories: ko.observableArray([]),
CategoryChange: function(pCategory) {
if(pCategory.Order != pCategory.OldOrder || pCategory.ShowOpened != pCategory.OldShowOpened)
pCategory.IsUpdated(true);
else
pCategory.IsUpdated(false);
}
};
ko.applyBindings(ViewModel);
</script>
Итак, в этом примере у меня установлен флажок ShowOpened, который может вызывать метод CategoryChange, который изменит переменную внутри объекта (что мне нужно позже, чтобы узнать, какой объект обновлен). Но когда chechbox изменен, он всегда отправляет старое значение, метод запуска, а затем меняет значение. Есть ли способ исправить это?