我想在此实例中使复选框或多或少地像单选按钮一样工作。这就是我到目前为止所拥有的。我希望能够在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 = '';
}
}
答案 0 :(得分:0)
如果不了解TOC小部件的内部细节,尤其是其DOM,则很难知道如何查询其模板中的所有复选框。假设您的treeCheckboxClicked
已被调用,而e.target
是复选框元素本身,则以下代码可让您接近所需的功能:
if (e.checked) {
query('checkbox', self.domNode).forEach(function (checkbox) {
checkbox.checked = checkbox != e.target;
});
//...
}
注意:这假设已加载了dojo / query模块。
答案 1 :(得分:0)
您使用的是agsjs.TOC吗?他们有一个处理程序包括为您执行此操作。在examplesat 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])
}