knockout - 计算的observable参数仅适用于备用点击

时间:2015-07-01 06:30:59

标签: javascript jquery checkbox knockout.js

我有一个主复选框,点击选中所有复选框。对于子复选框,除了mainCheckBox之外,我还有一些不同的逻辑涉及2个不同的observable,当检查子复选框时,需要将值写入不同的observable。

我创建了一个带有参数的计算observable,如下所示:

var vm = ko.mapping.fromJS(data);
var viewModel = 
function () 
{
    this.self = this;
    this.ExportSchemas = vm;
    this.SelectAll = ko.observable(true);
    this.IsChecked = function (checkboxVM) {
        return ko.computed({
            read: function () {
                return this.SelectAll(); //problemLine
            },
            write: function (value) {
                checkboxVM.Selected(value);
                alert(checkboxVM.Selected());
            },
            owner: this.self
        });
    };
};

<input type="checkbox" data-bind="checked: SelectAll" value="None" id="mainCheckBox" name="check" />

<div data-bind="foreach: ExportSchemas">
    <div data-bind="foreach: Clauses">
        <input type="checkbox" value="None" data-bind="checked: $root.IsChecked($data), attr: { id: 'clause' + Id(), value: Id() }" name="check" />
    </div>
</div>

计算的observable的写行为很奇怪,当上面代码中的problemLine如上所述时,它适用于备用点击。当我使用以下内容代替problemLine时:

return this.SelectAll;

然后,计算的observable的写入正常工作,但读取停止工作并且检查/取消选中mainCheckBox对子复选框没有影响。

有什么建议吗?

0 个答案:

没有答案