Мне необходимо разработать AJAX-контрол, grid/three с динамической подгрузкой
содержимого узлов по клику. Элементов, в итоге, может быть довольно много.
В принципе, proof-of-concept я уже сделал, используя Mochikit. Вопрос, какой подход
будет более правильный — завести, например, JS — массив, содержащий все пункты меню,
какждый раз его обходить и строить таблицу и перерисовывать грид каждый раз,
или можно работать напрямую с DOM таблицы, представляющей грид, и по клику на пункты
меню делать appendChild или removeChild, в зависимости от того, разворачиваем мы пункт
или сворачиваем. Пока сделал второй вариант, но что-то меня в нем настораживает, да и
получилось довольно громоздко — так как для каждого элемента все равно надо хранить
ссылки на его подэлементы и обходить их и удалять соответствующие узлы из DOM. Код получается
мутноватый и чреватый ошибками.
Как быть? На всякий случай скажу, что это мой практически первый серьезный опыт
с DHTML/JS.
Рекомендую посмотреть на реализацию ActiveWidgets — www.activewidgets.com — очень хороший и гибкий компонент, в том числе с описанными вами функциями.
Замечу также что создавать сразу все строки таблицы, при определенном количестве — прямой путь к зависанию браузера и жестким тормозам.
AS>Рекомендую посмотреть на реализацию ActiveWidgets — www.activewidgets.com — AS>очень хороший и гибкий компонент, в том числе с описанными вами функциями.
Спасибо, смотрю, но оно здоровенное и явно не рассчитанное на то, что его код будут изучать (еще и обфусцированное).
AS>Замечу также что создавать сразу все строки таблицы, при определенном количестве — AS>прямой путь к зависанию браузера и жестким тормозам.
Ага, то есть остается один путь — работать с DOM таблицы и добавлять/удалять элементы.
Такой еще вопрос — нормально ли устанавливать свои атрибуты в элементах DOM?
Является ли это общепринятой практикой? Очень не хочется заводить для хранения своей служебной информации массивы и искать по ним.
Имхо, лучше пусть в памяти хранятся — перерисовка с нуля будет еще тяжелее
Кстати, советую попробовать обойтись без removeChild. Можно просто скрывать ветку, не удаляя ее, используя style.
Т.о. и дерево будет целое и нагрузка поменьше.
Здравствуйте, DarkRebel, Вы писали:
DR>можно работать с массивами как с хешами. последние версии браузеров это позволяют, за более ранние не ручаюсь.
DR>
DR>var arr=new Array();
DR>arr["qwe"]=123;
DR>arr["asd"]=456;
DR>arr["zxc"]=789;
DR>for (var i in arr) {
DR> alert("Key: " + i + ", Value: " + arr[i]);
DR>}
DR>
Только это уже не массив получается, а просто новые пропертя к этому объекту Array.
С таким же успехом можно и в любой другой объект javascript-а какие-угодно дополнительные поля добавить, массив как таковой он в javascript-е — здесь не при чем.