[knockout.js] 強制計算屬性函數運行


Answers

有一種方法可以根據你的強制重新計算所有觀測值:

getCurrentValues.valueHasMutated()
Question

給定一個計算屬性

vm.checkedValueCount = ko.computed(function(){
  var observables = getCurrentValues();  //an array of ko.observable[]
  return _.filter(observables, function(v) { return v() }).length;
});

假設getCurrentValues()可以返回代碼中其他地方修改的不同觀察集(並且來自比observableArray更複雜的結構)。

我需要checkedValueCount來更新

  • 它的一個依賴關係發生了變化
  • getCurrentValues()返回一組不同的觀察值。

問題是ko.computed似乎ko.computed了最後返回的值,並且只在依賴性更新時才更新。 這處理第一種情況,但不處理後者。

我正在尋找的是一種強制checkedValueCount重新運行的方法。 一些我可以使用的東西:

changeCurrentValues();
vm.checkeValueCount.recalculate();

最簡單的,因為我有

a = ko.computed(function() { return Math.random() })

我如何強制調用a()兩次返回不同的值。




假設getCurrentValues()可以返回代碼中其他地方修改過的不同組的觀察值

我假設getCurrentValues()是一個函數。 如果你可以使它成為一個計算,你的checkedValueCount會神奇地開始工作。

你可以讓getCurrentValues是一個計算而不是一個函數?






Related