Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在knockout.js中使用checkall或uncheckall的树视图_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 在knockout.js中使用checkall或uncheckall的树视图

Javascript 在knockout.js中使用checkall或uncheckall的树视图,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我使用以下代码在knockout.js中创建了一个包含多级数据的树 <ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }"></ul> <script id="itemTmpl" type="text/html"> <li> <span data-bind="text: name"></span> &l

我使用以下代码在knockout.js中创建了一个包含多级数据的树

<ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }"></ul>

<script id="itemTmpl" type="text/html">
    <li>
        <span data-bind="text: name"></span>
        <input type='checkbox'>
        <ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }">

        </ul>
    </li>
</script>
  • 但现在我想在敲除中扩展它,如果我选中父项,那么它的所有子项都被选中,如果取消选中父项,那么所有子项都被选中

    这里是js fiddle链接


    我制作了一个版本,它不改变原始数据,而是使用KO映射

    我还利用Opertinity演示了使用我的约定库编写代码所需的工作量

    MyApp.TreeViewModel = function(data) {
        var mapping = {
            items: {
                create: function(options) {
                    return new MyApp.TreeViewModel(options.data);
                }
            }
        };
        this.checked = ko.observable(false); 
        this.checked.subscribe(this.onChecked, this);
    
        this.items = ko.observableArray();
    
        ko.mapping.fromJS(data, mapping, this);     
    };
    
    MyApp.TreeViewModel.prototype = {
        constructor: MyApp.TreeViewModel,
        onChecked: function(checked) {
            ko.utils.arrayForEach(this.items(), function(item) {
                item.checked(checked);
            });
        }
    };
    
    • 用我的自由
    • 没有

    您的复选框没有数据绑定到任何东西。您只是想显示一个复选框,还是实际上有一个选中的属性?我的复选框用于激活和停用数据库中的节点,我的意思是它们是数据绑定的。@rahularyansharma所以在现实中,您的复选框看起来有点像
    no-yet。。我还将我的数据粘贴到了JSFIDLE中。如果您希望对项目进行
    isChecked
    ,那么您可以使用根级别的
    单击
    处理程序,在该处理程序中,您可以递归地选中或取消选中较低级别的项目。。。类似于:我刚刚发现一个问题,如果我检查了变形,然后从5天内取消检查,变形也应该取消检查。您可以使用创建函数中的options.parent将父项添加到子项,当取消选中子项时,取消选中父项,你是否可以编辑你的代码,因为我是新手。jsI只说你是KO冠军。