0

次のコードがあります。

    self.isViewingFolder = ko.observable();
    self.isViewingSet = ko.observable();
    self.canEditFolder = ko.observable();

    self.isViewingFolder(ko.computed(function() {
        return router.activeRoute().moduleId == 'viewmodels/folder';
    }));
    self.isViewingSet(ko.computed(function () {
        return router.activeRoute().moduleId == 'viewmodels/set';
    }));
    self.canEditFolder(ko.computed(function() {
        return self.isViewingFolder() && auth.isAuthenticated() && !self.isPublicFolder()
    }));

isViewingFolder と isViewingSet は常に期待どおりに更新されますが、canEditFolder は 1 回だけ更新されます。canEditFolder を

canEditFolder(isViewingFolder())

その後、機能しますが、そこにロジックが必要なので、計算されたオブザーバブルを使用しています。なぜこれが機能しないのでしょうか?

4

1 に答える 1

0

何が起こっているかというと、最初の 2 つの関数のオブザーバブルが更新を上位のオブザーバブルにカスケードしていないということです。isViewingFolder() を引数として持たない canEditFolder は、その初期値を評価しますが、後で更新を受信しないため、その値を更新するように指示する新しい引数が必要です。

さて、canEditFolder は常に isViewingFolder と等しいので、なぜ追加の関数が必要なのですか?

于 2013-05-31T20:45:44.633 に答える