Проблема с множественными перезагрузками фантазии дерева - PullRequest
0 голосов
/ 16 октября 2018

У меня есть приложение-журнал, в котором у меня есть необычное дерево, отображающее записи журнала для пользователя, вошедшего в систему. Ниже этого дерева у меня есть другое необычное дерево с раскрывающимся списком над ним, которое позволяет выбирать других пользователей и просматривать их записи в журнале.Как только вы выбираете пользователя, он захватывает его идентификатор пользователя, а затем загружает второе дерево с его записями.Это прекрасно работает до седьмого выбора, когда дерево зависает и в основном убивает мой сеанс Tomcat.Я должен перезапустить Tomcat, чтобы исправить это.

Мой HTML-код:

<div class="journalList left-column">
  <div id="logTree"></div>

  <div class="browser">
    <div class="userWrapper">
      <h4>Browse Other User Logs</h4>
      <select id="otherUser">
      </select>
    </div>
    <div id="browseTree"></div>
  </div>
</div>

Идентификатор logTree - это необычное дерево для пользователя, вошедшего в систему. BrowseTree предназначено для выбранногоuser.

Соответствующий код в JavaScript для # logTree.

$('#logTree').fancytree({
    source: {
        type: 'post',
        cache: false,
        url: "/LogbookServlet",
        data: {action:"init", sub:"logtree"},
        datatype: 'json'
    },
    lazyLoad: function(event, data) {
        var node = data.node;
        data.result = getLogTreeData(node.key);
    },
    loadChildren: function(event, data) {
        var node = data.node;
        var activeNode = $("#logTree").fancytree("getActiveNode");
        if (activeNode) {
            activeNode.setExpanded(true);
            var mon = new Date().getMonth();
            var curMonth = months[mon];
            var children = activeNode.getChildren();
            if (children) {
                for (var i = 0; i < children.length; i++) {
                    var childNode = children[i];
                    var title = childNode.title;
                    if (title == curMonth) {
                        $("#logTree")
                        .fancytree("getTree")
                        .activateKey(childNode.key);
                     }
                }
            }
        }
    }
});

Этот раздел кода вызывается при первой загрузке страницы:

var otherUsrId;
$('#browseTree').fancytree({
    source: [],
    lazyLoad: function(event, data) {
        var node = data.node;
        data.result = getLogTreeData(node.key, otherUsrId);
    },
    loadChildren: function(event, data) {
        var node = data.node;
    }
});

У меня естьобработчик для выбора, чтобы обнаружить смену пользователей:

$('#otherUser').on('change select', function() {
    // Get the User ID from the Select
    otherUsrId = $(this).val();
    getUserTree(otherUsrId);
});

А вот код для getUserTree ():

function getUserTree(otherUsrId) {
    var userTree = $('#browseTree').fancytree("getTree");
    userTree.reload({
        url: "/LogbookServlet",
        data: {action:"init", sub:"logtree", otherUsrId:otherUsrId},
        datatype: 'json'
    });
}

Итак, после выбора пользователя в 7-й раз,Необычное дерево "browseTree" просто зависает при вращающемся значке загрузки, и это убивает мой браузер.Есть идеи?Похоже, что-то вызывается слишком рекурсивно?Не уверен.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Итак, я выяснил свою проблему .... Оказывается, я делал рекурсивный вызов функции getChildren () на стороне сервера.Поскольку я использую отложенную загрузку во всем втором дереве, мне не нужно было вызывать это.

0 голосов
/ 22 октября 2018

Я не совсем уверен, что это поможет, но я заметил критический момент.Пожалуйста, попробуйте добавить это перед созданием дерева:

$(":ui-fancytree").fancytree("destroy");

Это отсутствие destroy (иногда) вызывало у меня проблемы при перезагрузке, поэтому я надеюсь, что это также исправит вашу проблему; -)

...