Knockout JS Observable Array可见Count

时间:2014-08-08 00:18:56

标签: knockout.js

使用Knockout JS set visible:对可观察数组中的项进行数据绑定。有没有办法可以在Knockout JS中计算出具有可见数据绑定= true的项目数?

我尝试过这样的事情(不工作):

    var visibleItems = ko.utils.arrayFilter(self.MyItems(), function(item) {
        return item.visible == true;
    });
    var result = visibleItems().length;

在此测试中,item.visible未定义。这就是我正在寻找的,我怎样才能获得与其“data-bind = visible:”相对应的Knockout JS'可见状态属性值?是否可以在项目中的某个位置访问?

2 个答案:

答案 0 :(得分:2)

除非您的可观察数组self.MyItems中的项具有visible属性,否则您要执行的操作无法完成。 Knockout中的visible绑定会更改DOM元素的display属性,而不是更改基础数据。

来自visible绑定的文档:

  
      
  • 当参数解析为类似false的值(例如,布尔值false,或数值0,或null或未定义)时,绑定会将yourElement.style.display设置为none,从而导致它被隐藏这优先于您使用CSS定义的任何显示样式。

  •   
  • 当参数解析为类似true的值(例如,布尔值为true或非空对象或数组)时,绑定将删除yourElement.style.display值,使其变为可见

  •   

答案 1 :(得分:1)

我相信你需要使用ko.computed。原因是你原来拥有的只会计算一次。

var visibleItems = ko.computed(function () {
    return ko.utils.arrayFilter(self.MyItems(), function(item) {
        return item.visible == true;
    });
});

var result = visibleItems().length;