Хобрук: Ваш путь к мастерству в программировании

dynatree selectmode=3 не учитывается при использовании отложенной загрузки

Я пытался использовать dynatree с ленивой загрузкой в ​​​​своем проекте. Когда я попытался совместить функцию выбора с флажками и выбрать режим 3, я был разочарован, увидев, что правило выбора для режима 3, которое выбирает все, включая детей, детей .... детей, когда выбран родитель. Это потому, что дети еще не были загружены.

У кого-нибудь есть обходной путь, чтобы заставить это работать? Я был бы очень признателен за любые предложения. Занк я!!

17.10.2012

Ответы:


1

При добавлении дочерних элементов выбранного родителя проверьте, есть ли у родителя дочерние элементы. Если TRUE, добавьте каждого дочернего элемента и установите для каждого из этих дочерних элементов значение selected.

Вот код ниже. onLazyRead поднимется наверх. Каждый раз, когда вы нажимаете на ленивый узел, эта функция срабатывает. Внутри этой функции должен быть вызов вашей функции, которая извлекает дочерние данные для только что выбранного вами узла.

В приведенном ниже коде я решил эту проблему. Практически все, что он делает, это проверяет, выбран ли родитель добавляемого узла. Если TRUE, вы добавляете узел, а затем .select() его.

Это намного проще при отмене выбора узла, потому что все узлы уже загружены. При отмене выбора просто спуститесь по иерархии дерева от узла, который отменяется, и просто снимите отметку с каждого узла.

Я знаю, что это слишком много кода, чтобы просто бросить вам его, но, надеюсь, вы сможете уловить из него идею. Если вы не можете, я постараюсь вернуться к этой теме во время работы. Может быть, вы даже можете опубликовать то, что у вас есть до сих пор?

onLazyRead: function(node){

jQuery("#tree2").dynatree("getTree").disable();

        var pParentID = node.data.key;          

                    //Select the Node

        doChildReport(pParentID); //Get Children for this node's ID

    },


///....
//Methods to grab data from a "XMLHttpRequest GET" go here
//....

//When you finally want to add the children that you fetched using the ID of the node you selected...

//treeArray is an array of node data that has been parsed out of a 
//string returned by a "XMLHttpRequest GET"

//Contents of array in order, repeating: treeArray[0] = ParentID, [1] = nodeID [2] = nodeName
//Example, the array would return [111], [222], ["Child Node"]


if(){ //IF Next fetched node is on the last level, ie. no children
            //add normally
        }
    else{  //If NOT, add lazy.
        if(treeArray[1] != "nill" && treeArray[1] != undefined){

        //IF THE PARENT NODE IS SELECTED
        if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[0]).isSelected() == true){

        //AND IF the child node does not exist
        if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){

            //Add the child node and then mark it selected
            addChildNodeLazy(treeArray[1], treeArray[2], treeArray[0]);
            jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]).select();
        }   
        }else{
            if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
                addChildNodeLazy(treeArray[1], treeArray[2], treeArray[0]);
            }
        }
    }
}

Функция ленивой загрузки...

function addChildNodeLazy(NodeID, NodeName, ParentID){
        jQuery("#tree2").dynatree("getTree").getNodeByKey(ParentID).addChild({title: NodeName, key: NodeID, icon: false, isFolder: true, isLazy: true});
    }
17.10.2012

2

По общему признанию, следующее немного взломано... но решает эту проблему:

onSelect: function (flag, node) {
    if (flag && node.childList == undefined) {
        node.reloadChildren(function() {
            node.select(false);
            node.select(true);
        });
    }

Если узел выбран (флаг == true) И узел еще не загружен (childList == undefined), вызовите reloadChildren с функцией обратного вызова. Обратный вызов запускается после загрузки данных и просто включает/выключает флажок. Это приводит к выбору всех дочерних узлов (которые уже существуют).

01.03.2013
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..