相关疑难解决方法(0)

强制运行计算属性函数

给定计算属性

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

假设getCurrentValues()可以返回在代码中其他位置修改的不同可观察对象集(并且来自比observableArray更复杂的结构).

我需要checkedValueCount随时更新

  • 其中一个依赖项发生了变化
  • getCurrentValues()返回一组不同的observable.

问题是,ko.computed似乎记住了最后返回的值,并且只在依赖项更新时才更新.这处理第一种情况,但不处理后者.

我正在寻找的是一种强制checkedValueCount重新运行的方法.我可以使用的东西像:

changeCurrentValues();
vm.checkeValueCount.recalculate();
Run Code Online (Sandbox Code Playgroud)

最简单的说,鉴于我有

a = ko.computed(function() { return Math.random() })
Run Code Online (Sandbox Code Playgroud)

如何强制调用a()两次以返回不同的值.

knockout.js computed-observable

78
推荐指数
2
解决办法
4万
查看次数

当项目不可观察时刷新observableArray

基本上我有一个observableArray,每个项目的值都不是可观察的.这意味着当我更改项值时,observableArray的foreach循环中的UI不会相应地更新.

如果我必须将它们设置为observable,这意味着一个巨大的变化,那么有没有办法我可以手动刷新UI或observableArray foreach?

knockout.js

29
推荐指数
3
解决办法
3万
查看次数

淘汰赛纯计算可观察不更新

具有以下模型:

  var dataModel = ko.observable({ someProp: ko.observable() });

  var isValid = ko.pureComputed(function () {
    return dataModel().isValid;
  });
Run Code Online (Sandbox Code Playgroud)

我有以下功能:

      function testMe() {
          dataModel().isValid = false; // This does not work, why?
          console.log("isValid: " + isValid()); // Doesn't update, shows old value 

          dataModel({ isValid: false }); // This works however I loose all other properties
          console.log("isValid: " + isValid()); // Prints correctly updated value

          console.log(ko.toJSON(dataModel()));          
      }
Run Code Online (Sandbox Code Playgroud)

每当我运行testMe()

dataModel.isValid = false

并执行

console.log(“ isValid:” + isValid())

即使我在上面将其设置为false,它仍然设置为“ true”。为什么?我让它起作用的唯一方法是做

dataModel({isValid:false}); 但是,通过这种方式,我失去了模型中的所有其他属性。我该如何进行这项工作?

我究竟做错了什么?

knockout.js

1
推荐指数
1
解决办法
2888
查看次数

标签 统计

knockout.js ×3

computed-observable ×1