Jump to content
  • 0

Вариант навигации.


Dimitry Wolotko
 Share

Question

Сейчас сижу с больной головой (болею), думаю над навигацией в админке тех сайтов, что я сейчас делаю (несколько сайтов, админка одна).

Поделился со знакомцем мыслями - он мне сразу кинул (http://www.artlebedev.ru/tools/technogrette/js/tabsheets/) - идея пришлась по вкусу, но код JS раздут - ужас просто, написал свой, посмотрите, мб я что - то из функционала пропустил?

PS - мо? чудо с помощью php вполне можно и динамическим сделать.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<style>
.mon2 {color:black;}
.mon2 {color:red;}
</style>
</head>

<body>


<script type="text/javascript" language="JavaScript">
function so2( objName1, objName2, objName3 )
{
oObj1 = document.getElementById( objName1 );
oObj2 = document.getElementById( objName2 );
oObj3 = document.getElementById( objName3 );
oObj1c = document.getElementById( objName1 + "c" );
oObj2c = document.getElementById( objName2 + "c" );
oObj3c = document.getElementById( objName3 + "c" );
oObj1.style.display = "block";
oObj1c.className = "mon3";
oObj2.style.display = "none";
oObj2c.className = "mon2";
oObj3.style.display = "none";
oObj3c.className = "mon2";
}
</script>

<div>
<span class="mon3" id="date2c" onclick='so2( "date2", "date3", "date4" );'>Вкладка 1 |</span>
<span class="mon2" id="date3c" onclick='so2( "date3", "date4", "date2" );'>Вкладка 2 |</span>
<span class="mon2" id="date4c" onclick='so2( "date4", "date2", "date3" );'>Вкладка 3 |</span>
</div>
<div style="display: block;" id="date2">
Содержимое вкладки номер один:

<table border="1">
<tr>
<td>table data</td>
<td>table data</td>

<td>table data</td>
</tr>
<tr>
<td>table data</td>
<td>table data</td>
<td>table data</td>
</tr>
</table>
</div>
<div style="display: none;" id="date3">
Содержимое вкладки номер два:

Аниме убивает ваш мозг!

</div>
<div style="display: none;" id="date4">
Содержимое вкладки номер три:

<h1>труляля</h1>
<h2>труляля</h2>
<h3>труляля</h3>
<h4>труляля</h4>
<h5>труляля</h5>
<h6>труляля</h6>
</div>

</body>
</html>

Link to comment
Share on other sites

  • Answers 154
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0
Прокомментирую-ка я некоторые грабли в вашем скрипте:

С удовольствием дам пояснения по каждому пункту.

> для отсечения IE используется банальный navigator.userAgent.indexOf("MSIE"), то есть любители по-spoof-ить свои юзерагенты заранее идут лесом;

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

> метод getElementsByTagName('*') предполагает, что IE ниже шестой версии отдыхает;

И отлично. Сама MS не поддерживает данные версии продуктов. Зачем поддерживать старье?

>метасимвол b в регулярном предполагает, что имена классов с дефисами внутри прид?тся выбирать более внимательно;

Решается на уровне проектной документации для разработчиков.

> do-while предполагает, что при начальном индексе (i), равном нулю, мы можем уплыть в светлую даль вечного loop-a, и почему именно do, и почему снизу;

Верно. Запишем как багу. Do-while самый быстрый цикл в JS.

> ноды засоряются ненужными данными, которые легко можно держать снаружи

Не очень удобно. Особенно если потребуется других компонент доступ к этим данным. Могу пояснить на примере, если надо.

> там прилинкован зачем-то свой же родитель,

Потому что прописка ноды меняется. А значит и меняется родитель. :)

> имя собственного же класса

Потому что никому не запрещено дописать еще классы. И как потом искать?

> да болтающийся текст activeTab

Не константа. Разные компоненты могут использовать разные классы.

> и т.д.) что чревато конфликтами в IE (возможное совпадение им?н в глобальном констексте)

Очень серьезная проблема :( Никто не мешает стоить именование объектов так, как кому нравится. В больших проектах замечательно работает правило именования функций префиксами и наиболее полным отражением сути функций в ее названии.

> очень сомнительна необходимость в нетривиальных и бажных dispatchEvent/fireEvent для такой примитивной задачи, как клик по табу;

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

> повсюду натыканы try-catch, но реальная проверка чего-либо вообще не производится;

Нужно сугубо для успокоения клиентов, дабы не раздражать их JS-error'ами, а свести все к банальному "не работает". Инценденты были. А проверку производить собственно не требуется, так как пользователю незачем видеть сообщения об ошибках.

>один кусок скрипта во внешнем файле, другой в html

Если внимательно посмотреть, то внешний файл - универсальная библиотека.

> первоначальная инициализация не по загрузке, а по месту скрипта в потоке,

Раздробите файл на куски, как это сделано во всех крупных проектах, и вы поймете, что ничего плохого в этом нет.

> обработчики заведены архаично в тегах...

И в чем плохость данного метода? :( А, наверное лучше городить сверху систему идентификаторов для всех тегов, чтобы присваивать нужным тегам банальные обработчики.

> общую логику даже не беру в расч?т...

Предложите ваш, самый лучший, самый идеальный вариант. А мы посидим и подумаем, чем он хорош, а чем - нет.

Если стояла задача написать качественный/reuse-ный/командный/кроссбраузерный/масштабируемый код, то вряд ли. А если ещ? и предположить, что это код коммерческий, то тут пахнет выговором от босса, как минимум... :)

Я сам себе выговор делать не буду. В данном примере ( на компонент это явно не тянет ) стояла задача написать простой в использовании и несложный код. Идеальный код нельзя написать в принципе, только по одной причине - всех вариантов не предусмотреть. Да и не надо это, в самом совершенном коде очень тяжело что-либо понять.

Link to comment
Share on other sites

  • 0
Господа!!! У вас все в порядке? Вы вообще тут о чем?

Чего-то в обоих скриптах навигацией для сайта даже не пахнет. Вы сообсна какую именно задачу решали в вашем состязании?

Пока с трудом представляю, где и как это можно применить, ну разве что на оллимпиаде по информатике.

Любой из предложенных кодов можно спокойно применить в навигации по сайту. Или я не понимаю сути понятия "навигация по сайту"? :)

Link to comment
Share on other sites

  • 0
Любой из предложенных кодов можно спокойно применить в навигации по сайту. Или я не понимаю сути понятия "навигация по сайту"? :)

Да использовать то конечно можно, разве кто-то это запрещает. Можно в принципе и воду в решете носить, тяжело конечно (по дороге много воды проливается), но учитывая что do-while самый быстрый цикл в JS то думаю что быстро воду натаскает.

Просто давайте рассуждать логически: - Ради того, что-бы описать несколько десятков ссылок в виде списка и выпадающих списков, которые и будут выступать в роли пунктов навигации, стоит-ли городить такой огород.

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

Вы бы сами стали строить список навигации по сайту на одном из ваших скриптов? (только честно)...

Скрипты слишком сложные, к тому же ваше s0rr0w рассуждение о том что якобы "старье" отдыхает, не совсем правильное. Это не есть взгляд хорошего програмиста. "КОМАНДНОГО" да, но не хорошего. Комманды тоже не все хорошие, а работать в комманде под пару браузеров, как-то... даже не знаю...

Вот некоторые до сих пор в DOS сидят, стало быть они "курят"?

Link to comment
Share on other sites

  • 0

sensor, а если прочитать задание, которое изначально ставилось, то о навигации сайтов никто и речи не вел. Речь веласть про навигацию в админке.

Наша дуэль служит хорошим примером. Авось из нее кто-нибудь вынесет чего интересного. Я в том числе.

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

По поводу хорошести программиста. Кроссбраузерность кода никакого отношения к качествам программиста не имеют. Когда делается покупка дорогостоящих и сложных программных продуктов, то выбирается соответствуюещая платформа под них. Покупая тот же фотошоп вы должны понимать, что вы должны еще выполнить ряд условий к платформе, на которой вы будете запускать данный продукт. Так что наличие жестких требований в продуктах - норма. Продукты - не сайты. Можно насильственно органичивать используемое ПО и железо.

Link to comment
Share on other sites

  • 0

Покупая тот-же фотошоп - Я прекрасно понимаю что для работы с графикой мне понадобится как минимум платформа с OS Windows.

Но что же мне делать если у меня в качестве платформы Уникс? Ставить Винду или не покупать Фотошоп?

Вопрос именно в двух варриантах: Или покупать (но выполлнить условия с Windows) или Не покупать но остаться на прежней платформе...

Так вот кроссбраузерность играет точно такую же роль в коммерческом плане. Или мне покупать вашу разработку или обратиться к другой "комманде" которая предлагает более гибкий продукт.

В частности это кассается

Можно насильственно органичивать используемое ПО и железо.

Можно конечно, но "МОНОПОЛИЯ" не принесут вам успеха. Всегда найдутся более "хитрые", более "быстрые", более "умные" и.т.д...

По поводу "хорошести" програмиста - ну извините пожалуйста, совсем не хотелось вас обидеть, возможно вы не совсем уловили суть. Я не считаю плохим программистом не вас s0rr0w не AKS, но пока лидирует AKS.

А по поводу изначально поставленной задачи (про навигацию), мне показалось что тема называется именно так. И не суть какая именно навигация в Админке или не в Админке (разница не существенная). Полезного в обоих ваших скриптах я пока ничего не извлек, но хотелось бы. Конечно сохранил у себя в заначках на "черный день", но честное слово так и не понял: - А это вообще зачем?

В общем я так понял что вы просто вступили в интеллектуальную дискуссию и провели некое состязание. Ну это конечно хорошо, только вот наблюдатели со стороны сидят раскрыв рты и ничего не могут понять... Ай да Российские програмисты, кого хочешь с ума сведут!!!:)

Link to comment
Share on other sites

  • 0

Кроссбраузерность играет роль сугубо только для сайтов. Для корпоративных интранет и интернет систем - кроссбраузерность почти не играет роль. Попробуйте в государственный сектор продвинуть как стандарт FF. :)

Монополия приносит MS огромный успех. :( И даже если есть хитрые, быстрые, умные, то это им мало помогает. FF как платформа в десятки раз лучше IE, но, увы, монополия делает "успех" IE.

А это вообще зачем?

Показать разницу мышления при работе над конечной задачей. И, как результат, абсолютно разный код.

Основная задача, которая преследовалась, показать, что ради лучшей масштабируемости и простоты в работе над кодом можно пренебрегать логической разметкой HTML, перенеся логику на CSS-классы. Кстати, с удивлением обнаружил в коде MS POPFLY аналогичный моему подход.

Link to comment
Share on other sites

  • 0

s0rr0w, Вы не отвечаете на вопросы, которые меня интересуют в большей степени, чем описание работы вашего варианта. С чем это связано? "Нагородили" лишнего и необъяснимого?

Попытаюсь последний раз, обобщив все ранее заданные мной вопросы.

Кто, где и когда признал Вас непререкаемым авторитетом в области веб-разработки? Где та "доска почета", на которой ваши "труды" представлены, как образцы идеально выполненной командной работы? И, наконец, кто или что позволяет Вам твердо верить в собственную непогрешимость?

Взять, хотя бы, часть, касающуюся javascript. Заглянул Zeroglif и обнаружил в вашем сценарии кучу ошибок, которые свидетельствуют о вашей (или вашей команды) некомпетентности. Конечно Zeroglif и у меня найдет столько же ошибок (или больше), но я-то себя, в отличии от Вас, не позиционирую эдаким гением разработки.

А теперь посмотрите на свой код? Оцените его гибкость и масштабируемость?

В моем случае очень просто добавить в прототип конструктора какой-нибудь метод, и добавить его вызов в нужном месте.

Вообще, я делал по принципу шаблона преобразований (как в случае с xslt). Т.е. если необходимо, то можно написать даже еще один конструктор (или два, или сто два, сколько угодно), и добавить вызов этого (этих) конструкторов.

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

Так ведь в моем случае это сделать еще проще. У меня используются методы addEventListener/attachEvent. Поэтому любое дополнительное преобразование может легко "обвешать" табы своими обработчиками.

P.S. Последние комментарии написал не для s0rr0w (его это все мало интересует), а для тех, кто, как оказалось, заглядывает в эту тему.

Link to comment
Share on other sites

  • 0
Но вот ваша интелектуальная дуэль, больше напоминает сугубо "личное доказательство своей правоты". Это исходит от каждого из аппонентов...

Жаль, конечно, что Вы увидели все в таком свете. Я старался, как мог, последовательно отвечая на высказывания о "правоте", не противопоставлять свою "правоту". Посмотрите:

Так что готов поспорить, что предложенные варианты - лучше, удобнее для разработчика.
Никак не представляется возможным оспаривать ваше мнение ... Что тут сказать - удобно так удобно, заставить делать иначе, или хотя бы убедить, я не могу.
Хочешь проверить?
Как в такой ситуации докопаться до истины? А никак!
Принимаешь участие в соревновании?
Да легко, боже мой! Только бесполезно это все...

Могу признать, что мне наверняка еще рановато преследовать тех выскочек, что пишут: "мой вариант лучше..., только я знаю, как сделать правильно". Но ничего не могу с собой поделать - хочется что-то делать, чтобы люди думали, прежде чем публично высказаться.

Ну и, конечно же, смею Вас заверить, что в этой теме не стоит искать готовых решений. Здесь почти с самого начала все ушло в оффтоп (чтобы Вы знали, что я отдаю себе отчет о происходящем).

Я не считаю плохим программистом не вас s0rr0w не AKS, но пока лидирует AKS.

"Лидирует" среди плохих программистов? :) Неплохо - лучший из худших. Или "лидирует" по "плохости"? :(

Link to comment
Share on other sites

  • 0

s0rr0w, поддерживаю Ваши аргументы в полной мере.

Правда, я до подобной прагматичности ещ? не дош?л, да и не сильно хочется =)

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

Как пример, последний проект, в котором я принимал участие, имел требования: Windows 2000/SP4, IE6/SP2 и было запрещено даже просто тестировать в других браузерах/OS.

В общем, командная игра заключается в том, чтобы сделать наиболее эффективное по затратам/масштабируемости/реюзабельности решение, которое да?т максимальные возможности по повторному использованию кода. Что вед?т к элементарному облегчению условий труда себе и коллегам и увеличению заработков.

Что мне не сильно нравится в коде -- отсутствие идеологии, я предпочитаю красивые решения.

По результатам публикации кода -- пальму первенства отдам s0rr0w, за наиболее практичное решение, идущее из опыта (очень похоже на код человека, учившегося на шишках, а не умных теоретизированиях).

Link to comment
Share on other sites

  • 0
...максимально сузить рабочую платформу

...запрещено даже просто тестировать в других браузерах/OS.

...затратам/масштабируемости/реюзабельности решение...

Явное противоречие - о каких "затратах/масштабируемости/реюзабельности" может идти речь, если изначально Вы говорите о максимальной ограниченности решения?

...решение, идущее из опыта (очень похоже на код человека, учившегося на шишках, а не умных теоретизированиях).

Значит то, что я написал в самом начале, касается и Вас. А писал я о том, что люди, отвергающие теорию в пользу своих "шишек", превратили веб в помойку.

Link to comment
Share on other sites

  • 0
Явное противоречие - о каких "затратах/масштабируемости/реюзабельности" может идти речь, если изначально Вы говорите о максимальной ограниченности решения?

Где противоречие в моих словах? Масштабируемость кода и поддержка неограниченного числа платформ -- разные вещи.

Значит то, что я написал в самом начале, касается и Вас. А писал я о том, что люди, отвергающие теорию в пользу своих "шишек", превратили веб в помойку.

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

Link to comment
Share on other sites

  • 0
Где противоречие в моих словах? Масштабируемость кода и поддержка неограниченного числа платформ -- разные вещи.

Я пишу об ограниченном решении, к которому вообще незачем возвращаться в будущем. Если только править баги, которых полно у тех, кто учится на собственных "шишках", выдавая их за опыт.

Если приятно ползать по помойке -- пожалуйста, ползайте.

Не понял. Это что за фраза? Хотите оскорбить?

А я пойду выбирать людей, в резюме которых есть нечто большее, чем список прочитанных стандартов.

Здесь речь не об этом. Мой оппонент изначально отверг вариант с использованием стандартной разметки и логики. Противопоставил этому он свои "шишки" и "костыли" (иных аргументов я не увидел).

Так вот давайте с самого начала. В этом Вы с ним согласны?

И не спешите, также как и s0rr0w, подчеркнуть свой статус. Я ни в его команду, ни в вашу не прошусь, следовательно не нужно писать, кого Вы выбираете, а кого нет. Еще раз говорю - здесь речь не об этом.

Link to comment
Share on other sites

  • 0
Что мне не сильно нравится в коде -- отсутствие идеологии, я предпочитаю красивые решения.

Я сильно упростил решение в JS части, но в HTML - вполне себе нормальная идеология, построенная на идентификации функциональной принадлежности по классам. HTML продиктован сугубо минимизацией затрат на темплейтирование и создание более сложных вариаций и комбинаций.

Link to comment
Share on other sites

  • 0
Мой оппонент изначально отверг вариант с использованием стандартной разметки и логики.

Ваш код как раз показывает, почему я ее отверг. Итак, стоит задача сделать табы разноцветными. Что нужно сделать в вашем коде? Написать новый обработчик. Нужно сделать табы в табах. Что надо сделать? Написать новый обработчик? Переписать код? Нужно усложнить HTML структуру закладки, как того требует дизайн. Что надо сделать в вашем коде? Снова написать новый обработчик. Через пару месяцев интеграции вашего кода в какой-либо интерфейс у вас будет десятка два абсолютно бесполезных обработчиков, разобраться в логике работы которых будет ой как сложно. Вот и получился выигрыш в одном месте, но это пиррова победа.

И не спешите, также как и s0rr0w, подчеркнуть свой статус. Я ни в его команду, ни в вашу не прошусь, следовательно не нужно писать, кого Вы выбираете, а кого нет. Еще раз говорю - здесь речь не об этом.

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

Link to comment
Share on other sites

  • 0
А писал я о том, что люди, отвергающие теорию в пользу своих "шишек", превратили веб в помойку.

Смелое заявление. Теория тем и хороша, что только теория. Практика требует куда больших уровней абстракций при работе с кодом. Что есть HTML? Всего лишь контейнер. Контейнер для данных. Количество тегов строго ограничено. А вот названия классов - нет. Именно поэтому абстракция кода на уровне классов - более масштабируемое решение по причинам отсутствия ограничивающих факторов. Это не помойка, это просто альтернативный вариант.

Link to comment
Share on other sites

  • 0

Довел кстати до ума кому интересно, може тконечно плохо но все атки :)

 <script type="text/javascript">
<!--
function $()
{
var elements = new Array();
for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
Function.prototype.bind = function(object)
{
var method = this
return function() {
return method.apply(object, arguments)
}
}
function setMenuObserver() {
window.contentBlocks = new Array();
window.navBlocks = new Array();
var content = $('content').getElementsByTagName('p');
for (i=0; i<content.length;i++) {
window.contentBlocks[i] = content[i];
}

var menu = $('nav').getElementsByTagName('li');
for(i=0;i<menu.length;i++) {
window.navBlocks[i] = menu[i];
menu[i].onclick = function () {
for(j=0; j<window.navBlocks.length; j++)
if(j == this) {
window.contentBlocks[j].className= "show";
window.navBlocks[j].className= "active";
} else {
window.contentBlocks[j].className = "none";
window.navBlocks[j].className= "";
}
}.bind(i);
}
}
//-->
</script>

Link to comment
Share on other sites

  • 0
> для отсечения IE используется банальный navigator.userAgent.indexOf("MSIE"), то есть любители по-spoof-ить свои юзерагенты заранее идут лесом;

Обычно для интерфейсов поддерживать не более 2-х браузеров. Это существенно удешевляет разработку.

Вс?-таки вы афишируете сво? решение на публичном форуме, нужно предполагать и копипаст, и слабый анализ, а вы могли бы запросто обойтись без вычленения IE таким способом. Запросто. Не подавая другим плохой пример.

> метод getElementsByTagName('*') предполагает, что IE ниже шестой версии отдыхает;

И отлично. Сама MS не поддерживает данные версии продуктов. Зачем поддерживать старье?

IE6 тоже старь?. IE7 в смысле BOM/DOM/Javascript почти такое же старь?. Много чего нового не держит, но нельзя же из принципа отказывать их пользователям в рабочем скрипте. А в обсуждаемом контексте поддержка потребовала бы от вас всего 2-х строчек. Кстати, если говорить не о старье, а о потенциальном свежаке, то как насч?т занятого вами идентификатора getElementsByClassName, который в перспективе забивать не хотелось бы...

>метасимвол b в регулярном предполагает, что имена классов с дефисами внутри прид?тся выбирать более внимательно;

Решается на уровне проектной документации для разработчиков.

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

> do-while предполагает, что при начальном индексе (i), равном нулю, мы можем уплыть в светлую даль вечного loop-a, и почему именно do, и почему снизу;

Верно. Запишем как багу. Do-while самый быстрый цикл в JS.

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

> ноды засоряются ненужными данными, которые легко можно держать снаружи

Не очень удобно. Особенно если потребуется других компонент доступ к этим данным. Могу пояснить на примере, если надо.

Поясните, конечно.

> там прилинкован зачем-то свой же родитель,

Потому что прописка ноды меняется. А значит и меняется родитель. :)

Тоже поясните, не заметил.

> имя собственного же класса

Потому что никому не запрещено дописать еще классы. И как потом искать?

Дописав класс, мы ж не удаляем прежний. Ищется как всегда, анализируя className, ничего необычного.

> да болтающийся текст activeTab

Не константа. Разные компоненты могут использовать разные классы.

В рамках этого конкретного мира табов это константа, другое дело, что сам мир не инкапсулирован, все тяготы и лишения несут на своих плечах ноды.

> и т.д.) что чревато конфликтами в IE (возможное совпадение им?н в глобальном констексте)

Очень серьезная проблема :( Никто не мешает стоить именование объектов так, как кому нравится. В больших проектах замечательно работает правило именования функций префиксами и наиболее полным отражением сути функций в ее названии.

Смайлик погрустнел бы, зная вы сколько раз мне пришлось ответить по поводу этого бага. Правила именования тут вообще-то не при ч?м. Я вам говорил о конкретном баге IE (частично и Оперы тоже) плюс о том, что в среде js-программистов есть некие красные флажки, бессмысленное "неявное заведение переменных" - один из них.

> очень сомнительна необходимость в нетривиальных и бажных dispatchEvent/fireEvent для такой примитивной задачи, как клик по табу;

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

Бажность характеризуется наличием багов, нетривиальность малой распростран?нностью методов. Разве вы не можете вызвать нужную функцию переключения таба? Ни них же уже висят обработчики. Вот их и вызывайте.

> повсюду натыканы try-catch, но реальная проверка чего-либо вообще не производится;

Нужно сугубо для успокоения клиентов, дабы не раздражать их JS-error'ами, а свести все к банальному "не работает". Инценденты были. А проверку производить собственно не требуется, так как пользователю незачем видеть сообщения об ошибках.

И я про это. Реальной проверки чего-либо нет, но есть для галочки, чтоб не пугались... :(

> первоначальная инициализация не по загрузке, а по месту скрипта в потоке,

Раздробите файл на куски, как это сделано во всех крупных проектах, и вы поймете, что ничего плохого в этом нет.

Скрипт привязан к точке, а не к событию, модификация HTML может смещать точку, нужно за эти следить и проч. отвлеч?нные предметы.

> обработчики заведены архаично в тегах...

И в чем плохость данного метода? :) А, наверное лучше городить сверху систему идентификаторов для всех тегов, чтобы присваивать нужным тегам банальные обработчики.

"Плохость" в том, что это слабо сочетается с такими важными словами, как "компонента", "отделение от содержания", "корректное взаимодействие обработчиков", "современный код" и т.д.. В общем смысле у inline-обработчиков масса малоизвестных неприятных особенностей, но они вполне себе работоспособны. Javascript вообще язык всепрощающий, можно писать допотопно, архаично, с запутанной логикой и прийти к нужному результату. В этом смысле опираться только на результат, как на критерий правильности не совсем верно, тем более на узком js-форуме, где нужно спорить идеями, логикой и качеством знаний.

> общую логику даже не беру в расч?т...

Предложите ваш, самый лучший, самый идеальный вариант. А мы посидим и подумаем, чем он хорош, а чем - нет.

Двух достаточно. :(

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

Link to comment
Share on other sites

  • 0
Задели личное самолюбие? Ну извини тогда.

Да какое, к черту, самолюбие?!! Я лишь прошу не засорять тему рассказами о своих должностях. Неужели не понятно?

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

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

??? Это кто из нас куда кого втянул (или пытается втянуть)???

OK! Наконец-то ближе к делу.

Итак, стоит задача сделать табы разноцветными. Что нужно сделать в вашем коде? Написать новый обработчик.

Вы зачем принимаете решения за меня?

Для того, чтобы реализовать "рюшечки" есть CSS.

Нужно сделать табы в табах. Что надо сделать? Написать новый обработчик? Переписать код?

Опять неверное предположение! Я ведь привел примеры с 4-мя табами, и пусть они будут вложенными.

Нужно усложнить HTML структуру закладки, как того требует дизайн. Что надо сделать в вашем коде? Снова написать новый обработчик.

Нет, нет, и еще раз (уже в который) нет!

Смелое заявление.

Не более, чем какое-нибудь из ваших заявлений. Взять хотя бы "рассказ" о том, что из тегов при формировании документа нужны лишь DIV, SPAN, A, TABLE (и все запчасти), IMG.

Практика требует куда больших уровней абстракций при работе с кодом.

И каким образом это вступает в противоречие с логически верной разметкой?

Что есть HTML? Всего лишь контейнер. Контейнер для данных. Количество тегов строго ограничено.

Непонимаю. То Вы сами пишите, что из тегов может понадобится лишь пять штук, то вдруг пишите, что Вам не хватает тегов.

Именно поэтому абстракция кода на уровне классов - более масштабируемое решение по причинам отсутствия ограничивающих факторов.

Темный лес - "более масштабируемое, менее масштабирование". Изначально я писал о простой и понятной структуре данных, которую легко и непринужденно можно трансформировать во что угодно (в данном случае, используя методы DOM).

Link to comment
Share on other sites

  • 0
Вс?-таки вы афишируете сво? решение на публичном форуме' date=' нужно предполагать и копипаст, и слабый анализ, а вы могли бы запросто обойтись без вычленения IE таким способом. Запросто. Не подавая другим плохой пример.[/quote']

Подайте хороший пример, напишите правильный код определения IE.

IE6 тоже старь?. IE7 в смысле BOM/DOM/Javascript почти такое же старь?. Много чего нового не держит, но нельзя же из принципа отказывать их пользователям в рабочем скрипте.

Перечитайте то, что было написано мной про искусственное ограничения количества платформ. Речь идет не про сайты, а про бэк-энд системы.

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

Ничего не занято. В DOM будет использован в качестве интерфейса документ или нода. Но никак не window.

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

Например? Давайте все познавать на примерах. Ваш вариант ограничителя?

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

Докажете, что do-while не самый быстрый, перепишу код на самый быстрый.

Поясните, конечно.

Текущее положение ноды не является константой. Если привязывать данные к какому-то паренту, то при изменении структуры может быть потеряна связь. Или же наоборот, нужно принудительно терять связь у данной ноды с ее парентом. Как вариант - перемещение таба в другое место, в другой табулятор.

Тоже поясните, не заметил.

Внимательно изучите код. Там уж более чем понятно все расписано.

Дописав класс, мы ж не удаляем прежний. Ищется как всегда, анализируя className, ничего необычного.

А какой из них был дописан? Вы код смотрели? У меня там как раз для этого случая сделан пример :)

В рамках этого конкретного мира табов это константа, другое дело, что сам мир не инкапсулирован, все тяготы и лишения несут на своих плечах ноды.

Это их карма

Смайлик погрустнел бы, зная вы сколько раз мне пришлось ответить по поводу этого бага.

Суть изложите. В моей практике пока что не было серьезных проблем.

Бажность характеризуется наличием багов

Хоть один пример в студию.

нетривиальность малой распростран?нностью методов. Разве вы не можете вызвать нужную функцию переключения таба? Ни них же уже висят обработчики. Вот их и вызывайте.

Чтобы вызвать функцию переключения таба, нужно будет передать все необходимые параметры, а эти параметры нужно будет привязать к опшинам. Не проще ли хранить параметры в одном месте? Вы код вообще изучали?

И я про это. Реальной проверки чего-либо нет, но есть для галочки, чтоб не пугались... :)

Однажды меня лишили премии как раз за то, что выдавалась ошибка. Мне детально пояснили, почему я не прав. И я согласился с аргументами.

Скрипт привязан к точке, а не к событию, модификация HTML может смещать точку, нужно за эти следить и проч. отвлеч?нные предметы.

Выполнение по онлоаду ничем не отличается от данного метода. Все равно запуск функций будет стековым с идентичными последствиями.

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

Напишите метод сильного сочетания. :(

В любом случае за отдельный кусочек кода будет отвечать какой-то компонент. Чтобы привязаться к обработчику onclick данного компонента все равно придется выполнить передачу параметра. Нет разницы как это будет сделано, или же через идентификацию + листенер, или же прямой записью функции в тело onclick обработчика.

В общем смысле у inline-обработчиков масса малоизвестных неприятных особенностей, но они вполне себе работоспособны.

Например?

Javascript вообще язык всепрощающий, можно писать допотопно, архаично, с запутанной логикой и прийти к нужному результату. В этом смысле опираться только на результат, как на критерий правильности не совсем верно, тем более на узком js-форуме, где нужно спорить идеями, логикой и качеством знаний.

Давайте ваш пример кода, как модерновый, неархаичный, с чистой и прозрачной логикой и с великолепным результатом в конце. Или все так и будет на уровне светских бесед?

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

На практике все куда хуже. Табы требуют очень сильной абстракции, куда более высокой, чем в моем примере. Потому как вариантов реализации масса.

Link to comment
Share on other sites

  • 0
AKS, s0rr0w - хватит переходить на личности.

Где и что "личного" Вы усмотрели? Нет ничего такого, честное слово.

...личностные выяснялки меня не возбуждают.

А у Вас какие есть предложения? Надеюсь, они не выходят за рамки приличия? :)

Link to comment
Share on other sites

  • 0
Где противоречие в моих словах? Масштабируемость кода и поддержка неограниченного числа платформ -- разные вещи.

Я пишу об ограниченном решении, к которому вообще незачем возвращаться в будущем. Если только править баги, которых полно у тех, кто учится на собственных "шишках", выдавая их за опыт.

Вы представляете себе, что существуют проекты, которые в неизменном виде живут годами?

Если приятно ползать по помойке -- пожалуйста, ползайте.

Не понял. Это что за фраза? Хотите оскорбить?

Ни в коем разе, это к вопросу что человек сам себе выбирает окружение. Мне, например, нравится жить совсем в другом мире, без помоек =)

А я пойду выбирать людей, в резюме которых есть нечто большее, чем список прочитанных стандартов.

Здесь речь не об этом. Мой оппонент изначально отверг вариант с использованием стандартной разметки и логики. Противопоставил этому он свои "шишки" и "костыли" (иных аргументов я не увидел).

Так вот давайте с самого начала. В этом Вы с ним согласны?

C самого начала я с ним согласен, что нет никакой разницы, какие теги использовать. За исключением тех, внешний вид которых не может контролироваться.

Другое дело, что я предпочитаю логически верную разметку.

Но в любом случае, для меня куда более ценным является мнение человека, имеющего практический опыт. Даже если его опыт ид?т в разрез с моим.

Кстати, мо? решение табов точно так же выложено в этой теме, т.ч. есть возможность сравнить и подходы.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy