KOJS モデルにバインドされたチェックボックスがあります。
<input type="checkbox" data-bind="checked:settings.remember">
ユーザーがチェックボックスの値を変更したときにデータベースを更新しようとしています。ただし、ビューモデルは次の jQuery 関数の後に更新されます。
$("input[type='checkbox']").click(function(){ });
$("input[type='checkbox']").change(function(){ });
$("input[type='checkbox']").mouseup(function(){ });
別の言い方をすれば、これらの関数内の viewModel を覗くと、ユーザーが変更する前のチェックボックスの値が返されます。したがって、チェックボックスが一度 true で、現在は false (および false として表示) になっている場合、viewModel は引き続き true と表示されます。
バインディングが発生した後に発生する可能性がある、使用できる他の jQuery 関数はありますか? または、viewModel 変数が変更された後に関数を呼び出す他の賢い方法を考えられますか? 私の現在のviewModel宣言は次のとおりです。
var viewModel = {};
//...get some data from AJAX calls
ko.mapping.fromJSON(data, viewModel.'+file+');
file は動的な値です (複数のデータベースから viewModel を描画します)
上記の問題は、以下のハックなソリューションで解決できますが (私の回答を参照)、RP Niemeyer の回答は、手動サブスクリプションを使用するより良い方法があることを示唆しています。これまでのところ、マッピング プラグインを使用して、viewModel 内で物事を定義する方法を理解できていません。
これまでのコードは次のとおりですが、もちろん、JSFiddle では機能しません。