我遇到了敲除“已检查”绑定的问题。似乎复选框处的“更改”事件在更新之前返回旧值(因此,如果未选中,它将返回 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 被更改时,它总是会发送旧值、触发方法,然后更改值。有没有什么办法解决这一问题?