2013-05-31 3 views
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 한 번만를 업데이트하지만, 예상대로 업데이트된다. 내가

canEditFolder(isViewingFolder()) 

에 canEditFolder를 설정하면 그 다음은 작동하지만 내가이 관찰 계산 사용하고, 그래서 거기에 논리를해야합니다. 왜 이것이 효과가 없을까요?

답변

0

처음 2 개 함수의 관측 값이 상위 관측 값에 대한 계단식 업데이트가 아니라는 것입니다. 인수로 isViewingFolder()가없는 canEditFolder는 초기 값을 평가하고 나중에 업데이트를받지 않으므로 값을 업데이트하도록 알기 위해 새 인수가 필요합니다.

이제 canEditFolder는 항상 isViewingFolder와 같으 므로 추가 기능이 필요합니까?

+0

설명해 주셔서 감사합니다. 더 많은 논리가 결국 canEdit의 가치를 결정할 것이기 때문에이 함수가 필요합니다. 방금 계산 된 observable 별도의 정의를 시도하고 함께 canEditFolder() 업데이트,하지만 여전히 업데이트되지 않습니다. 함수가 필요한 경우 어떻게 수정 될 수 있습니까? – RobVious

+0

은 router.activeRoute()입니다. moduleId observable? 계산 된 재평가를 얻는 유일한 방법은 관찰 가능한 개체가 업데이트 이벤트를 던지거나 (해킹 된 솔루션에 대해) 평가할 새 요소를 제공하는 것입니다. var dummy = ko.observab – mikeswright49

+0

isViewingFolder 및 isViewing set과 같은 것이 정상적으로 작동합니다. moduleId는 관찰 가능하지 않습니다. 그들은 observables이고 올바르게 업데이트됩니다 - canEditFolder가 그들을 잡는 이유는 무엇입니까? – RobVious

관련 문제