ノックアウトの「チェック済み」バインディングに問題があります。チェックボックスの "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>
したがって、この例では、私は(私が更新されているものを対象知るために、後で必要があること)オブジェクト内の変数を変更しますCategoryChangeメソッドをトリガーすることができます]チェックボックスをShowOpenedています。しかし、チェクボックスが変更されると、常に古い値を送出し、メソッドをトリガして値を変更します。これを修正する方法はありますか?
コードに問題があります。 'ShowOpened'と' IsUpdated'のどちらもko.observablesではありません(あなたがいつも古い値を取得している理由でしょう)。このコードはどのように機能しますか? 'CategoryChange'は例外を投げます。 – freakish
@freakishあなたがライトだから、この投稿を作成するときに間違いを犯しました。しかし、あなたが指摘したエラーはまだ問題ではありません。 – akhabaiev
Oi、まだこれが欠けています: 'this.ShowOpened = ko.observable(ShowOpened);'これと 'pCategory.ShowOpened()'。私は、このポストを書いている間、あなたは多くの間違いをしたと言わなければならない... – freakish