我遇到了敲除「已檢查」綁定的問題。看起來,複選框中的「更改」事件在更新之前返回舊值(因此,如果它未被選中,它將返回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被改變時,它總是發送舊值,觸發方法,然後更改值。有沒有什麼辦法解決這一問題?
你的代碼有問題。 ShowOpened和IsUpdated都不是ko.observables(也許這就是爲什麼你總是得到舊值)。這個代碼如何工作? 'CategoryChange'應該拋出異常。 – freakish
@freakish你好,我最初創建這個帖子時犯了一個錯誤。但你指出的錯誤仍然不是問題。 – akhabaiev
Oi,仍然缺少這個:'this.ShowOpened = ko.observable(ShowOpened);'和this:'pCategory.ShowOpened()'。我必須說,在寫這篇文章的時候你犯了很多錯誤... – freakish