Knockout计算不更新?

时间:2013-05-31 20:37:51

标签: knockout.js

我有以下代码:

    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只更新一次。如果我将canEditFolder设置为

canEditFolder(isViewingFolder())

然后它工作,但我需要逻辑,所以我使用计算的observable。为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

正在发生的事情是,前两个函数中的可观察量并没有将它们的更新级联到更高的可观察量。没有isViewingFolder()作为参数的canEditFolder评估它的初始值,然后它不接收更新,因此需要一个新的参数来告诉它更新它的值。

现在,因为canEditFolder总是等于isViewingFolder为什么你需要额外的功能呢?