计算的observable不基于复选框值更新

时间:2018-03-26 03:45:31

标签: knockout.js computed-observable

希望你做得很好。

我目前正在使用KnockoutJS进行UI界面,我想完成以下任务:

在我的UI中,我从JSON文件中获取组件列表,(基于bool值的一些复选框,基于int值的一些数字输入等)。有些组件依赖于其他组件:

  • 启用自定义费率(A复选框)
    • 自定义费率(数字输入)

JSON文件中的自定义费率参数有一个名为依赖关系的字段,我们在其中定义条件字符串(“parent1&& parent2”)。

我的想法是使用参数observable数组值构建一个isVisible计算可观察

viewModel.isVisible = ko.computed(function(){
        var expr = "Han && Solo";
    var parentVars = expr.split(' && ');
    var result = ko.observable(true);
    for(var i = 0; i < parentVars.length; i++){
            let element = viewModel.getParamByName(parentVars[i],viewModel.paramsArray());
        if(element != 'not found'){
          result = result && element.isVisible();
        }
    }

    return result;

});

我尝试在这里实现这个想法:https://jsfiddle.net/bignacio/y32g4801/62/

但计算结果不具约束力。

如何解决此问题?有没有更好的方法来处理这个问题?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

计算的observable不应返回observable。它应该只返回一个值。因此,第四行应该是:

var result = true;

计算的observable正在检查每个匹配项的isVisible属性,但这些项未正确绑定到复选框。您应该使用value绑定:

,而不是使用checked绑定
<input type="checkbox" data-bind="checked: $data.isVisible">

https://jsfiddle.net/y32g4801/78/

相关问题