Dynatree addChild - вопрос к автору компонента - PullRequest
0 голосов
/ 23 июня 2010

http://wwwendt.de/tech/dynatree/index.html

Я хотел бы уточнить следующее: когда вызывается addChild - перерисовывается ли все дерево или только изменяются узлы (добавленные узлы и узлы, у которых есть новые дочерние элементы)?

Я получаю 2 конфликтующих фрагмента информации: Ленивая загрузка в dynatree говорит, что только затронутые узлы будут перерисовываться

Dynatree замедляется при динамической загрузкесо 100+ узлами здесь говорится, что он перерисовывается каждый раз, когда используется addChild

Возможно, я что-то упускаю?

Какой это?

1 Ответ

1 голос
/ 26 июня 2010

Dynatree хранит узлы во внутренней структуре.«Рендеринг» - это процесс создания или обновления элементов HTML в DOM для отображения статуса дерева.Например, последний узел в ветви имеет специальное имя класса, поэтому добавление узла требует удаления этого класса из предыдущего «последнего узла» и добавления его к новому.

Каждый раз, когда вы вызываете .addChild (данные), рендеринг срабатывает.Если вы передаете 100 узлов одним вызовом, рендеринг выполняется только один раз, поэтому это всегда более производительно, чем вызов 100 раз одним узлом.

В настоящее время (выпуск 0.5.4) addChild использует этот шаблон:

var prevFlag = tree.enableUpdate(false);
[modify the tree]
tree.enableUpdate(prevFlag);

enableUpdate (true) вызывает tree.redraw (), поэтому все дерево обновляется.Это изменится с выпуском 1.0, но даже тогда будет быстрее объединять вызовы addChild.

Другой аспект: , когда являются узлами , созданными в DOM.Начиная с версии 1.0 создание HTML-элементов откладывается до тех пор, пока узел не станет видимым (развернутым) в первый раз.Таким образом, можно загружать очень большое количество узлов в эффективную внутреннюю структуру данных Dynatree без взлома DOM.

Если удобнее предварительно загружать целое дерево или лениво загружать отдельные ветвипо требованию зависит от сервера, сети и клиента.Так что это всегда вопрос сравнения различных сценариев.

...