コンストラクター関数によって作成されたビューモデルがあり、一連の監視可能なプロパティと一連のプレーンな古いプロパティがあります。インスタンス化したら、インスタンスに値を設定すると、その値への変更は計算されたオブザーバブルに反映されません。
これが私が見ているものの蒸留版です:
function ViewModel(active) {
var self = this;
self.active = active;
self.getClasses = ko.computed(function () {
return this.active ? "yup" : "nope";
}, self);
}
var vm = new ViewModel(false);
vm.active = true;
alert(vm.getClasses()); //returns "nope" :/
この計算されたオブザーバブルは、依存するオブザーバブルに触れると再評価されますが、直接呼び出すと、アクティブの古い値で評価されます。
ko.computed は、親への更新を無視する新しいクロージャーを作成しますか? プレーンな値と観察可能な値を混在させることはお勧めできませんか? (私が実際に問題を抱えている計算には、オブザーバブルや他のプロパティへの依存関係がありますが、実行時に他のプロパティが変更されるとは思いません。これは、実際には現在の単体テストの問題です。)
確かにアクティブをオブザーバブルにすることはできますが、これを行う別の方法があるかどうか疑問に思っています。