Xsltlistviewwebpart запоминание штата в cookie не работает должным образом

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/40500

Вопрос

У меня есть 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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top