Javascript 带有分层数据的复选框
我正在使用带有分层数据的Javascript 带有分层数据的复选框,javascript,slickgrid,Javascript,Slickgrid,我正在使用带有分层数据的CheckboxFormatter插件。问题是,如果我检查一个折叠的组,然后展开它,默认情况下不会选择子行(selectedCellCssClass)。我对使用SlickGrid很陌生。但我假设控件应该是这样流动的: 当使用复选框格式化程序时,必须有一个与每行关联的“隐藏”属性。单击该复选框将简单地将该属性切换为true/false 单击复选框应引发一个可以覆盖的onClick/onChecked事件 在这种情况下,可以检查选中的行是否有子行,如果有,则在子行上设置“hi
CheckboxFormatter
插件。问题是,如果我检查一个折叠的组,然后展开它,默认情况下不会选择子行(selectedCellCssClass
)。我对使用SlickGrid很陌生。但我假设控件应该是这样流动的:
谢谢 我最终给出了自己的复选框实现,而没有使用
CheckboxFormatter
。我在数据模型中添加了一个checked
属性,每当检查一行时,我都会递归地更改所有受影响行的状态
var
$target = $(event.target),
isChecked = $target.is(":checked"),
id = dataContext['id'],
item = dataView.getItemById(id),
children = getChildren(id), // helper method to get children for curr
parent = getParent(id); // helper method to get parent for curr
dataContext['checked'] = isChecked;
dataView.updateItem(dataContext['id'], dataContext);
// loop through all children recursively
while (children && children.length > 0) {
var item = children.shift();
item.checked = isChecked;
dataView.updateItem(item.id, item);
var _children = getChildren(item.id);
if (_children && _children.length > 0)
children = [].slice.call(_children).concat(children);
}
// traverse up the hierarchy
while (parent && parent.id != config.currentUser) {
if (!isChecked) {
parent.checked = isChecked
dataView.updateItem(parent.id, parent);
} else {
// if all siblings are checked, change state of parent.
var siblingsChecked = true;
$.each(getChildren(parent.id), function (index, item) {
if (!item.checked)
siblingsChecked = false;
});
if (siblingsChecked) {
parent.checked = isChecked;
dataView.updateItem(parent.id, parent);
}
}
parent = dataView.getItemById(parent.parentId);
}
然后,我必须重写getItemMetaData方法,为所有选中的行返回一个特定的css类
dataView.getItemMetadata = function (index) {
var item = dataView.getItem(index);
if (item.checked === true) {
return { cssClasses: 'slick-row-selected' };
}
};
我的情况与您类似(我试图检查组中的所有行)。我假设你使用的是团体,对吗?组标题中是否有复选框?如果您这样做,复选框是否会切换?“我和他的关系也有很多问题。”埃里克,我现在已经找到了解决办法。我最终给出了自己的checkbox实现,而没有使用CheckboxFormatter。所以,每当我检查父对象时,我都会递归地为所有子对象设置一个属性,然后重写getItemmetadata,为所有这些子对象返回一个特定的css类。嗯,听起来很有趣。你愿意为它提供代码吗?我想查看一下。我正在发布代码作为可能的答案。