【问题标题】:How to select only one Parent and its child checkbox at a time in flex?如何在flex中一次只选择一个父及其子复选框?
【发布时间】:2015-09-01 07:41:17
【问题描述】:

我在 flex 中创建了嵌套复选框。

我只想选中一个父复选框。 如果我选择父复选框(Cluster1),则应选择该父复选框的所有子复选框,并且在取消选中当前复选框之前不应单击其他父复选框。

复选框树的当前 XML 结构:

public var treeData:XML =   <item name="vCenter Server" type="Server">
                            <item name = "Datacenter" type="Datacenter" checked="false">
                            <item name="Cluster1" type="ClusterComputeResource" id="mycusterOne" checked="false">
                            <item name = "Host 1" type="HostSystem" checked="false"/>
                            <item name = "Host 2" type="HostSystem" checked="false"/></item>
                            <item name="Cluster2" type="ClusterComputeResource" id="mycusterTwo" checked="false">
                            <item name = "Host 1" type="HostSystem" checked="false"/>
                            <item name = "Host 2" type="HostSystem" checked="false"/></item></item>  
                            <item name = "Host 3" type="HostSystem" checked="false"> </item></item>;

和代码:

protected function chk_clickHandler(event:MouseEvent):void
        {
            var myListData:TreeListData = TreeListData(this.listData);
            var selectedNode:Object = myListData.item;
            var tree:Tree = Tree(myListData.owner);
            var toggle:Boolean = chk.selected;
            if(this.chk.selected){
                //this.checked = true;
                this.itemXml.@checked = "true";
            }
            else
            {
                //this.checked = false;
                this.itemXml.@checked = "false";
            }
            var toggle:Boolean = chk.selected;

            if (toggle)
            {
                toggleChildren(data, tree, "true");
            }
            else
            {
                toggleChildren(data, tree, "false");
                if( this.itemXml.@type == "HostSystem" ){
                    toggleParents(data, tree, "false");
                }
            }

        }

 private function toggleChildren (item:Object, tree:Tree, checked:String):void
        {
            if (item == null) {
                return;
            } else {
                if(item.@type == 'HostSystem') {
                    item.@checked = checked;
                }
                var treeData:ITreeDataDescriptor = tree.dataDescriptor;
                if (treeData.hasChildren(item)) {
                    var children:ICollectionView = treeData.getChildren (item);
                    var cursor:IViewCursor = children.createCursor();
                    while (!cursor.afterLast) {
                        toggleChildren(cursor.current, tree, checked);
                        cursor.moveNext();
                    }
                }
            }

        }

        private function toggleParents (item:Object, tree:Tree, checked:String):void
        {

            if (item == null)
            {
                return;
            }
            else
            {
                if(item.@type == 'ClusterComputeResource')
                {
                    item.@checked = checked;
                }
                item.@checked = checked;
                toggleParents(tree.getParentItem(item), tree, checked);
            }
        }

【问题讨论】:

    标签: actionscript-3 flash apache-flex flex4 adobe


    【解决方案1】:

    您必须通知集合数据已更改。这将通知树更新它的视图(在您的项目渲染器中设置数据设置器)。

    类似于:

       collection.itemUpdated(node, "@checked");
    

    如果您不使用 XML 列表集合,则需要使用它。

      var collection:XMLListCollection = new XMLListCollection(xml);
    

    然后,当您完成更改后,您可能需要调用:

    collection.refresh();
    

    您写的其他所有内容乍一看都很好。

    *在手机上

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      相关资源
      最近更新 更多