私は彼らのサンプルでknockoutjsで遊んでいます。私は下にある元のコードを編集しました。依存関係が変更されている場合にのみ、fullNameメソッドが機能するように、fullNameメソッド内の依存関係を確実に知ることができます。ko.dependentObservableこのメソッドが依存関係を巧みに理解する方法を教えてください。
fullNameメソッドからthis.LastName()を削除すると、lastNameプロパティを変更してもfullNameメソッドが呼び出されません。
どうしたのでしょうか。
var viewModel = {
firstName: ko.observable("Bert"),
lastName: ko.observable("Bertington")
};
viewModel.fullName = ko.dependentObservable(function() {
alert('worked');
return this.firstName() + " "+ this.lastName() ;
}, viewModel);
// Activates knockout.js
ko.applyBindings(viewModel);
すべての依存関係が評価されるわけではないので、この動作は非常に危険です。 "return @ dependent1()|| @ dependent2()"のように評価される計算されたブール値のプロパティを考えてみましょう。最初の評価で@ dependent1()がtrueの場合、KOは計算されたプロパティも@ dependent2の変更を追跡する必要があることを知ることができません。私の意見では依存関係を設定する別のより明確な方法があるはずです。 – rosenfeld
@rosenfeld - あなたのケースでは、 'dependent1'が変更されない限り値は決して変わらないので、必要な唯一の依存関係です。危険なシナリオは、観察できないものに分岐した場合(時刻が12時以降の場合)です。変数に 'dependent1'と' dependent2'の両方を宣言し、適切な値を返すようにすることは常にオプションです。両方とも観測可能変数として追跡されます。助けることを望む! –