【问题标题】:computed observable not updating based on check box values计算出的 observable 不会根据复选框值更新
【发布时间】:2018-09-04 03:16:27
【问题描述】:

希望你做得很好。

我目前正在使用 KnockoutJS 开发 UI 界面,我想完成以下工作:

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

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

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

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

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/

但是计算的结果没有约束力。

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

感谢您的宝贵时间。

【问题讨论】:

    标签: knockout.js computed-observable


    【解决方案1】:

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

    var result = true;
    

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

    <input type="checkbox" data-bind="checked: $data.isVisible">
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多