dojo/cbtree取消选中所有复选框并选中选中复选框

dojo/cbtree uncheck all checkboxes and check selected checkbox

本文关键字:复选框 取消 dojo cbtree      更新时间:2023-09-26

我想让复选框在这种情况下或多或少像单选按钮一样工作。这就是我到目前为止所拥有的。我希望能够在treeCheckboxClicked()函数中做到这一点,这样它就可以取消选中所有剩余的复选框,然后选中选中的复选框。

buildTocTree: function (cp1) {
    var self = this;
            var toc = new TOC({
                checkboxes: false,
                enableDelete: true,
                deleteRecursive: true,
                showRoot: false,
                checkBoxes: false,
            }, self._viewId + '_tocTree');
    toc.on("checkBoxClick", dojo.hitch(this, "treeCheckboxClicked"));
},
treeCheckboxClicked: function (e) {  
            if (e.checked) {
                if (e.subLayers || e.name === 'GISLayer')
                    this.selectedLayerValue('');
                else if (e.layerInfos)
                    this.selectedLayerValue('');
                else
                    this.selectedLayerValue(e.name);
                if (this.selectedLayerValue() != '')
                    this._selectedGISSourceLayer = e;
                else
                    this._selectedGISSourceLayer = '';
            }
        }

如果不知道TOC小部件的内部细节,尤其是它的DOM,就很难知道如何查询其模板中的所有复选框。假设您的treeCheckboxClicked已经被调用,而e.target本身就是复选框元素,那么下面的代码应该可以让您接近所需的功能:

if (e.checked) {
    query('checkbox', self.domNode).forEach(function (checkbox) {
        checkbox.checked = checkbox != e.target;
    });
    //...
}

注意:这假设dojo/query模块已经加载

您在使用agsjs吗。TOC?他们有一个处理人员为你做这件事。在示例中http://gmaps-utility-gis.googlecode.com/svn/tags/agsjs/latest/examples/toc.html它们通过一个按钮来切换函数的开关,但您可以将其设为默认打开,并在树声明中包含以下代码段。(用您的图层替换DynaLayer 1)

toc.on('toc-node-checked', function(evt){
	// when check on one layer, turn off everything else on the public safety service.
	if (evt.checked && evt.rootLayer && evt.serviceLayer && evt.rootLayer == dynaLayer1){
	evt.rootLayer.setVisibleLayers([evt.serviceLayer.id])
    }