Открыть список
Как стать автором
Обновить

Комментарии 48

А есть ли варианта на mootoolse? Просто у меня на сайте используеться именно этот фреймворк.
Думаю адаптировать можно.
Были такие мысли. На большие деревья размер куков может не хватить :) Придется использовать чтонибудь посерьезнее. А так — отличное дерево. В избранное — если вдруг мне деревья понадобятся.
А я придумал как поступить — буду сохранять состояние самого глубокого узла, а всех предков раскрывать просто автоматом. Тогда может кук хватить.
Кстати какое у них ограничение я не помню?
я и сам не помню :) 2 или 4 кб на сайт вроде было.
пишут: Имеются следующие ограничения на размер cookies: всего может храниться до 300 значений cookies. каждый cookie не может превышать 4 Кб.

У меня тут храниться 2 значения.
Я прикинул — если сохранять все раскрытые узлы, то влезет примерно 700 узлов.

Но можно инфу сжать, как я предложил постом выше — буду записывать только состояние самого глубокого открытого узла, так как по логике все родительские узлы должны быть тоже раскрыты.

Количество хранимой инфы в кукуах можно сократить.
Сокращать нужно. Дерево не одно куков хочет :)

У меня тогда проблема была более сложная. Таких деревьев на сайт могло быть и под сотню. И если запоминать состояние каждого, то куков точно не хватило бы :) Пришлось на сервере хранить. Мы еще и таблицы пользователям давали настраивать под себя(колонки добавлять/убирать) — тоже надо было сохранять.
Да когда деревьев много, конечно нужно сохранять на сервере, тут уж не прокатит.
В единичном случае как основное меню для сайта оно покатит.

Его еще можно дальше проработать, но там уже будет с применением AJAX и сервер еще программировать надо будет.
может сохранять состояние в toggleNode? опера, к примеру, unload не поддерживает.
Этого не знал. Сделаю чтоб состояние по клику на узел сохранялось.
Понимаю, что прототип. И все же, почему не вынести маркеры за лейбл? Ну не красиво же)
Поясните. Не понял что значит «почему не вынести маркеры за лейбл» — видимо мой сленг немного другого профиля )
Я говорю, что если вынести пиктограмму папки (треугольник) за название самого пункта, т.е. левее, то будет гораздо лучше. Тогда все названия будут на одном уровне, независимо от того, содержат они вложенные элементы или нет.
НАрисуй, все равно не понял.
Ониже и так на одном уровне… ты про какие уровни...?
Теперь понятно. Попробую сделать.
нравицо развитие идеи
А драг-н-дроп версии нет часом? Чтобы можно было узлы перетаскивать мышкой…
Хм… теперь есть идея её сделать.
Но мне особо не нужна. Какая мотивация? Ручное упорядочивание перетаскиванием?
да, именно. Типа как слои в фотошопе — перемещать на другое место или закидывать внутрь какого-либо раздела. Применение — например упорядочивание разделов сайта в системе управления сайтом.
О! Это крутая функциональность уже, тут поболее нужно будет прпрограммировать. Не обещаю этого в скором времени. Взято на заметку.
наблюдаю как растет дерево с самого начала. хорошая работа, спасибо.
скажите, а есть в планах реализовать добавление вложенности и редактирование названия вложенности?
Поподробнее пожалуйста разъясни, что значит добавлени «Вложенности» и «Название вложенности».
Как-то терминология не подобралсь универсальная, так что не сразу ясно бывает.
к примеру чтобы возле «Ветки» был значек "+" при нажатии на который появлялся новый «Новый лепесток»,
а после этого при нажатии на значок «редактировать» можно было прямо в дереве переименовать надпись «Новый листок»… дальше можно подумать чтобы «Лепестки» можно было сортировать между собой, перетаскивая мышью вверх-вниз… таким образом получим прирост функциональности дерева… хочу сразу оговориться, что я не программист, а следовательно не понимаю сложность реализации всего изложенного выше
Идеи хорошие, я взял на заметку.
Быстро это сделать не получиться, но в копилку на реализацию я пожалуй закину.
для вашего плагина рекомендую (делюсь) плагин jquery.namesession.js (требует jquery.js и json2.js).

(function($)
{
var state = {};
if (/^\{.*\}$/.test(window.name))
{
state = JSON.parse(window.name);
}
else
{
window.name = '{}';
}

$.namesession = {
'set': function(n, v)
{
state[n] = v;
window.name = JSON.stringify(state);
},
'get': function(n, dv)
{
if (n in state)
{
return state[n];
}
return dv;
}
};

})(jQuery);
А куда он сохраняет данные, чето не очень понял?
Понятно что сериализует в JSON, а куда его?

По ссылке инфы мало очень.
в свойство window.name ;)

оно сохраняет себя в рамках одной закладки.
проверять доступность jquery.namesession можно конструкцией

if ('namesession' in $)
{
// use namesession
}
else
{
// use cookies
}
Прочитал. Класс! Встрою и его пожалуй.
Не пробовали загружать дерево в несколькот тысяч элементов?
Недавно воспользовался jquery TreeView, с таким количеством элементов ужасно тормозит даже на скроле
Не было необходимости. У меня максисмум 50-100 элементов было.
1000 элементов сразу загружать — не вижу смысла. При таких объемах нужно подгужать данные по AJAX при раскрытии узла.
запаришься кликать, если надо на все сразу посмотреть…
Делаем кнопку «Открыть всё» и нет проблем.
нет, мы вернулись в начало — все ужасно тормозит :)
В начало? Это ж к чему?
записывать информацию в куки, которые передаются при каждом запросе элементов с этого каталога и ниже — это как минимум расточительно. Ограничьте видимость куки только текущей страницей, если это возможно.
«Ограничить видимость куки» — что это значит?
поставить куке path аналогичный адресу страницы. Чтобы браузер не посылал это же куку при запросе остальных элементов из этого же каталога
Ок. Ясно path: location.href
Я разрабатывал аналогичный по назначению компонент и постараюсь дать пару дельных советов:
1) зачем вы намеренно усложняете жизнь пользователя, заставляя его формировать дерево со всеми этими
<li><span><a href="#111">1.1.1. Листик</a></span></li>
Все эти теги нужны только вашему скрипту, так пускай он их и расставляет сам, прозрачно для пользователя.
2) если на странице несколько деревьев — то каждое будет иметь одинаковый ID — парсер будет ругаться.
3) почему «multi-derevo», а не «multi-tree»? Или пишите на русском кириллическим алфавитом либо английский алфавитом на английском
4) если в ноде больше одной строки текста — чёрточки позиционируются по низу ноды — красивее было бы по середине.
5) ну и фич, конечно, совсем мало — как минимум не хватает подгрузки частей дерева по XHR, динамических чекбоксов итд.
1) согласен, можно это скрипту отдать
2) это разработка не завершена, никто не мешает заменить ID на класс
3) как хочу так и пишу — это мое личное дело. Может мне «мульти-дерево» слух ласкает.
4) красивее было бы, но требует дополнительной доработки скрипта — пока не критично и второстепенно
5) фич… ну вы конечно молодец, что идеи предалагаете, но я для себя в первую очередь делал — по необходимости. А эта жалоба — запрос на улучшение уже )
Динамические чекбоксы? Есть такая версия, но в личном пользовании. Доделать можно как угодно.

Вы ищите готовое решение? Тогда пока рано.
готовое решение у меня уже есть и оно меня устраивает полностью. настолько полностью, что не добавляли туда новых фич уже больше года.
Дерево классное! А можно подобную штуку на prototype найти?
Найти — нет. Можно адаптировать.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.