Javascript 带有分层数据的复选框

Javascript 带有分层数据的复选框,javascript,slickgrid,Javascript,Slickgrid,我正在使用带有分层数据的CheckboxFormatter插件。问题是,如果我检查一个折叠的组,然后展开它,默认情况下不会选择子行(selectedCellCssClass)。我对使用SlickGrid很陌生。但我假设控件应该是这样流动的: 当使用复选框格式化程序时,必须有一个与每行关联的“隐藏”属性。单击该复选框将简单地将该属性切换为true/false 单击复选框应引发一个可以覆盖的onClick/onChecked事件 在这种情况下,可以检查选中的行是否有子行,如果有,则在子行上设置“hi

我正在使用带有分层数据的
CheckboxFormatter
插件。问题是,如果我检查一个折叠的组,然后展开它,默认情况下不会选择子行(
selectedCellCssClass
)。我对使用SlickGrid很陌生。但我假设控件应该是这样流动的:

  • 当使用复选框格式化程序时,必须有一个与每行关联的“隐藏”属性。单击该复选框将简单地将该属性切换为true/false
  • 单击复选框应引发一个可以覆盖的onClick/onChecked事件
  • 在这种情况下,可以检查选中的行是否有子行,如果有,则在子行上设置“hidden”属性
  • 在选中的行上应用css
  • 如果有人能告诉我具体的事件和使用的属性,那将是一个很好的起点。此外,我提到的步骤只是一个猜测:D任何对实际过程的帮助都将不胜感激


    谢谢

    我最终给出了自己的复选框实现,而没有使用
    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类。嗯,听起来很有趣。你愿意为它提供代码吗?我想查看一下。我正在发布代码作为可能的答案。