Xsltlistviewwebpart запоминание штата в cookie не работает должным образом
-
09-12-2019 - |
Вопрос
У меня есть xsltlistviewwebpart, который показывает структуру дерева с узлами. Я сделал сценарий jQuery, который устанавливает печенье, которое сохраняет состояние узлов (расширено / рухнуло) между обратными сообщениями.
Я добавил скрипт с:
_spBodyOnLoadFunctionNames.push("RestoreClickedState");
.
... так что скрипт - последний, который работает на странице.
Проблема в том, что я получаю непоследовательные результаты:
между поступлением и моим скриптом. Есть что-то еще, что разрушает узлы: например, если я расширяю узел и оставьте 9 закрытых, после отложения мои 9 узлов закрыты, но я не могу, казаться рисунком почему.
Для других узлов, если я расширяю узел, и оставьте другие рухнуты, иногда после отступности другой узел неверно расширен вместо правильного.
Вот мой скрипт:
<script>
$(window).unload(function()
{
RememberClickedState();
});
var items = '';
function RememberClickedState() {
$('.ms-listviewtable tbody[id^="tbod"]').each(function(){
tid = $(this).attr('id');
tvisible = ($(this).attr('style') == undefined ||
$(this).attr('style').indexOf('display: none;') == -1);
items += tid+':'+tvisible+','
})
$.cookie("itemListState", items);
}
function RestoreClickedState() {
//alert("beginne");
string = $.cookie("itemListState");
//alert(string);
var cookies = string.split(',');
//alert(cookies.length);
$.each(cookies, function(i, val){
val = val.split(':');
show = (val[1] == 'true' ? true:false);
var test = val[0].substring(val[0].length -1, 1);
var thisID = test.replace("bod", "");
var thisImgID = "img_" + thisID;
if(!show && thisID)
{
//alert(thisID + " - " + thisImgID + " hiding");
ExpCollGroup(thisID, thisImgID);// ,null, show);
}
});
//$.cookie("itemListState", null);
}
_spBodyOnLoadFunctionNames.push("RestoreClickedState");
</script>
.
Когда я использую оповещение, чтобы проверить содержимое файлов cookie после каждой обратной передачи, он правильно показывает все файлы cookie, поэтому часть cookie сценария работает, но расширяется / рухнуть в соответствии с файлом cookie.
У кого-нибудь есть какая-то идея, потому что я имел дело с этим около 4 дней.
Большое спасибо заранее.
С наилучшими пожеланиями, Андрей
Редактировать только что понял, что все работает, но для второго обратна. Таким образом, первая запись после создания cookie, узлы правильно читаются от файла cookie, но неправильно расширены / рухнут, но в отложении после этого узлы правильно расширены / рухнут. Что приводит меня к веществу, что как-то есть проблема с _spbodyonloadfoundsnames.push.
Это не может быть проблемой с другим событием $ (окна). Toolload, потому что файлы cookie правильно читаются, поэтому первое событие работает как ожидалось.
Редактировать 30.07.2012:
Я постараюсь быть более понятным о TreeView. Под «TreeView», который я имею в виду, сам компонент - это WebPartPages: XSLTListViewWebPart, и да, это стандартный вид, с вариантами группировки. Пожалуйста, дайте мне знать, если требуется дополнительная информация.
Решение
Assuming that you used the default grouping options available in SharePoint lists: SharePoint already has this memorization behavior built in, and you are duplicating it.
Here is what could possibly happen:
- when the page loads, SharePoint expands the node because this is the stored state
- your script does the same interpretation and collapses it back
Here is what you could try:
- remove your script and see if the default behavior is just what you need
- instead of a script that switches states (ExpCollGroup), write a script that explicitly sets the state to expanded or collapsed. This way there is no risk of double switching.