我最終沒有使用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' };
}
};
我和你有類似的情況(我試圖檢查組中的所有行)。我假設你正在使用組?你在組頭中有複選框嗎?如果你確實做了複選框切換?我也遇到過很多麻煩。 – eric
@eric,我現在已經找到了解決方法。我最終給出了自己的複選框實現,而不使用CheckboxFormatter。因此,無論何時我會檢查父級,我都會遞歸地爲所有子級設置一個屬性,然後重寫getItemmetadata以爲所有這些子級返回特定的css類。 – prthrokz
嗯,這聽起來很有趣。你願意爲它提供代碼嗎?我想檢查一下。 – eric