Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Всем привет. Давно мучал вопрос: как люди объясняют, что описание всех событий на странице должно быть исключительно через делегаты и это круто, а писать прямо в тегах что-то типа onclick="some kind of function" это плохо и вообще bad style. Напоровшись на очередной проект, где описание логики страницы в несколько тысяч строк представляло из себя километры делегатов по довольно мутным селекторам я осознал, что вкурить эту хрень без пол литра довольно проблематично. В то время как разбирая разметку в поисках концов гораздо проще понять что происходит, если хотя бы в банальных ситуациях обработка onclick присутствует именно в тэге, а не закопано в сотнях строк кода, причем с селектором вида "table p button". Я уж не говорю что разметка может поменяться и чертов селектор отвалится, тогда как onlclick в кнопке будет жить да поживать. Я не против делегатов в целом (это была бы редкая ересь), мне непонятно зачем подчищать все события с разметки под ноль, делая код/разметку довольно хреново понимаемой. В чем соль этой "красоты"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 15:59 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Rosiv, полностью поддерживаю. сам пришёл к такому же мнению. куда проще нажать ctrl и кликнуть мышкой и ide сама метнётся к функции. но к сожалению не всегда это возможно, иногда динамически назначаются обработчики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 16:12 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
RosivЯ не против делегатов в целом Всё верно. Крайности в обе стороны плохо. Все события под ноль и наоборт, все события в тегах - это крайность. Т.е. вопрос не имеет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 16:56 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Откуда вообще километры делегатов? ИМХО проблема не в том как навесить события, а в том, что компонентный подход отсутсвует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 17:36 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
ок, приятно сознавать, что не я один задумывался над этой проблемой. Ибо да, ctrl+click и переходишь к функции и все понятно. А через делегаты (которые описаны где-то в блоке init строк эдак в 500) это все смотреть довольно проблематично. По поводу "почему так много строк" - страница шибко сложная. Там ajax риквестов штук 30, плюс куча промежуточной логики. Вот и получаем на ровном месте кучу строк. Но к сожалению разделять объекты отвечающие за вызовы и отлов промизов, логику приложения и просто вызов функций у многих "писателей" не модно. Создаем класс и пихаем туда через запятую все подряд, не стесняясь функций в 5-6 экранов. В целом я делегаты использую в 2х случаях: 1) контент генерится как-то автоматически. В целом я стараюсь от этой штуки уходить и чтобы html из скриптов не получался в принципе. Собственно для того репитеры и прочее барахло и придумали 2) элементов много. Они как-то вложены и вызываются однотипно. Но как правило кнопок это не касается. И потому кнопки стараюсь почти всегда через onclick делать, чтобы потом при необходимости сразу найти что тут собственно происходит. Когда на руках несколько проектов, с суммарным количеством от 10к строк, помнить всю эту ересь с делегатами с вложенными селеторами просто нереально. Ну а по пол часа вкуривать что откуда идет - тоже как-то грустно. Чтобы 2 раза не вставать, кто мне тогда сможет опять таки объяснить преимущества создания класса, перед простым объектом, при условии что мы не собираемся этот класс как либо переопределять или наследовать в принципе? Т.е. на кой черт люди пишут простыни с прототипом, чтобы в конце вызвать var a = new b(); вместо var b = {/* object methods etc*/}; b.init(). Есть в этом какой-то сакральный смысл, которого я не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 17:55 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Rosiv, Все очень просто. В правильном коде шаблоны лежат отдельно, контроллеры отдельно. В шаблонах существует только разметка, самая примитивная, без onclick и style и обычно с примитивной логикой. В контролерах описано все поведение шаблона, через делегаты или нет - это отдельная тема. Если все правильно разложено не бывает проблем, чтобы найти нужный кусок кода, это происходит даже быстрее, чем искать онклик, потом в каком-то проект-утилс-файле метод, который на этот онклик сработает. Вторая встречающаяся проблема, если вам надо выводить в шапку значение ячейки таблицы, скажем 100 на 100 над которым находится мышь, а по клику запомнить его, навскидку, сколько будет весить такая табличка без делегатов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:32 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Rosivок, приятно сознавать, что не я один задумывался над этой проблемой. Ибо да, ctrl+click и переходишь к функции и все понятно. А через делегаты (которые описаны где-то в блоке init строк эдак в 500) это все смотреть довольно проблематично. По поводу "почему так много строк" - страница шибко сложная. Там ajax риквестов штук 30, плюс куча промежуточной логики. Вот и получаем на ровном месте кучу строк. Но к сожалению разделять объекты отвечающие за вызовы и отлов промизов, логику приложения и просто вызов функций у многих "писателей" не модно. Создаем класс и пихаем туда через запятую все подряд, не стесняясь функций в 5-6 экранов.Для меня это выглядит как проблема в конкретном говнокоде том, что конкретный проект написан плохо. Следовательно с ним и надо рабираться. Рефакторить. RosivЧтобы 2 раза не вставать, кто мне тогда сможет опять таки объяснить преимущества создания класса, перед простым объектом, при условии что мы не собираемся этот класс как либо переопределять или наследовать в принципе? Т.е. на кой черт люди пишут простыни с прототипом, чтобы в конце вызвать var a = new b(); вместо var b = {/* object methods etc*/}; b.init(). Есть в этом какой-то сакральный смысл, которого я не понимаю?Хм, ну вот написал я Button и не собираюсь его менять и наследовать, а только использовать следующим образом: Код: javascript 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:48 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Rosiv, По видимому ты никогда не работал с AngularJS, Backbone, ReactJS, Knockout, EmberJS, Sencha? Если даже ничего из перечисленного по неким религиозным соображениям не нравится, пилится что-то подобное, но своё, с объектной моделью, разделением на конкретные структурные слои, шаблонизатор. Кто сегодня пишет приложения на onclick-ах, или ручным приводом с назначением делегатов по селекторам? Это же практически прибивание себя за яйца к разводному мосту. Ну может совсем небольшие сайтики, где надо отправить пару формочек и не требуют этого, и там достаточно повесить событие на onclick, но разрабатывать большие проекты таким образом... Да лучше сразу пристрелиться. Видел я один раз подобный проект, мне до сих пор хочется его развидеть. Естественно судьба проекта не выдержала испытание временем, ну что можно решить Ctrl-Click-ом? Если разработка представляется бесконечной и безумной отладкой для пациента, то это очень далеко от мира естественной понятной разработки современных приложений. Тут проблема видима в разработке через дебаг. Сегодня, мы открываем объектную модель и смотрим что должно происходить, например, при сохранении объекта. Не важно, каким образом это случилось, пользователь нажал кнопку, нажал Ctrl-Enter или даже Ctrl-Save, может он закрыл модальное окно, и сработал автосейв, мы работаем с бизнес-событием, а не с обработчиком кнопки. И никто не лезет в кнопку по Ctrl-Click. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 19:22 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
RosivТ.е. на кой черт люди пишут простыни с прототипом, чтобы в конце вызвать var a = new b(); вместо var b = {/* object methods etc*/}; b.init(). Есть в этом какой-то сакральный смысл, которого я не понимаю? DRY, и другие принципы разработки. Тут надо курить тему по разработке вообще, а не ударяться в конкретную конструкцию на JS, и понимание со временем придёт. Ну и опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 19:27 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
hVosttRosiv, По видимому ты никогда не работал с AngularJS, Backbone, ReactJS, Knockout, EmberJS, Sencha? Если даже ничего из перечисленного по неким религиозным соображениям не нравится, пилится что-то подобное, но своё, с объектной моделью, разделением на конкретные структурные слои, шаблонизатор. Все это подходит для SPA, а если у ТС многостраничное приложение с чисто серверной отрисовкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 12:11 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
ПарамонВсе это подходит для SPA может наоборот? Для SPA не подходит? Т.к. там больше динамики). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 12:20 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
ПарамонВсе это подходит для SPA, а если у ТС многостраничное приложение с чисто серверной отрисовкой? Тогда вопрос, а зачем вообще ТС-у яваскрипт? Наверное затем, чтобы добавить на свои страницы немного динамики. Если так, то не обязательно брать в разработку монстров типа AngularJS, с полным фаршем, включая марошрутизацию. Однако это не означает, что надо отказаться от компонентной модели разрботки. У ТС-а раздрай в голове, между способами привязки обработки события на селектор или через onclick. Он не знает, что биндить обработку событий можно как-то иначе, наверняка у него в коде лапша на лапше, которую он и сам до конца уже не понимает, а любой адекватный программист просто с горя напьётся, как только посидит часок над таким проектом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 13:42 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
hVosttНаверное затем, чтобы добавить на свои страницы немного динамики. Если так, то не обязательно брать в разработку монстров типа AngularJS, с полным фаршем, включая марошрутизацию. Однако это не означает, что надо отказаться от компонентной модели разрботки. Для того, чтобы добавить немного динамики нет смысла в AngularJS, даже урезанном. Думаю автор использует jquery для игр с дом, что в принципе нормально, при модульном подходе. jquery склоняет к привязке на селекторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 15:16 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
ПарамонДля того, чтобы добавить немного динамики нет смысла в AngularJS, даже урезанном. Думаю автор использует jquery для игр с дом, что в принципе нормально, при модульном подходе. jquery склоняет к привязке на селекторы. Ну исходя из того, что ТС писал, речь идёт о сотнях и тысячах обработчиках, по которым ему удобно ходить по ctrl-click. Насчёт селекторов, у них есть сакральное преимущество. Можно повесить всего один обработчик и он будет ловить хоть тысячу событий. А если поставить себе за правило НИКОГДА НЕ ПРИВЯЗЫВАТЬСЯ К СТИЛЕВЫМ СЕЛЕКТОРАМ, то и проблема уменьшится до масштабов мухи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:36 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
hVosttНИКОГДА НЕ ПРИВЯЗЫВАТЬСЯ К СТИЛЕВЫМ СЕЛЕКТОРАМ Тоже очень спорное утверждение. Я, например стараюсь в повторяющихся элементах использовать не более одного селектора или не использовать их совсем. Когда начинаешь оперировать с 10к элементами дома на странице - разница ощутима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 14:39 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
mage.lanhVosttНИКОГДА НЕ ПРИВЯЗЫВАТЬСЯ К СТИЛЕВЫМ СЕЛЕКТОРАМ Тоже очень спорное утверждение. Я, например стараюсь в повторяющихся элементах использовать не более одного селектора или не использовать их совсем. Когда начинаешь оперировать с 10к элементами дома на странице - разница ощутима.а если нужно ВНЕЗАПНО изменить внешний вид/структуру, то вылезают грабли в виде отвалившихся от селектора кнопок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 14:44 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
Antonariy, Наш спор - это путь в никуда. Если внезапно надо менять структуру - оторвите руки верстальщику, если дизайн был адаптивным, достаточно поменять less или что там у вас в качестве css. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 17:52 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
я так понимаю, селекторы входят в ГУИ и VIEW. Т.е. это фронт и работа фронт-программистов (прогерФронт+верстальщик). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 17:55 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
mage.lanAntonariy, Наш спор - это путь в никуда. Если внезапно надо менять структуру - оторвите руки верстальщику, если дизайн был адаптивным, достаточно поменять less или что там у вас в качестве css. Существуют и другие причины, когда надо изменить структуру. К примеру в результате эксперимента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 09:49 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
skyANAСуществуют и другие причины, когда надо изменить структуру. К примеру в результате эксперимента. На живом проекте? Первый раз слышу. В любом случае после "экспериментов" делают регресс тестирование, т.к. отваливаются не только события на кнопочках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 14:33 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
mage.lanskyANAСуществуют и другие причины, когда надо изменить структуру. К примеру в результате эксперимента. На живом проекте? Первый раз слышу. В любом случае после "экспериментов" делают регресс тестирование, т.к. отваливаются не только события на кнопочках Ну у кого-то ничего не отваливается :) Да и регресс тестирование чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 14:50 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
hVosttRosiv, По видимому ты никогда не работал с AngularJS, Backbone, ReactJS, Knockout, EmberJS, Sencha? Если даже ничего из перечисленного по неким религиозным соображениям не нравится, пилится что-то подобное, но своё, с объектной моделью, разделением на конкретные структурные слои, шаблонизатор. Работал, причем со всем списком. Но это не мешает людям писать всякую ересь на проектах, на которые я прихожу. Sencha вообще отдельная тема, которая с моей точки зрения довольно сомнительна с точки зрения скорости разработки, особенно при введении новых людей в проект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 12:29 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
RosivSencha вообще отдельная тема, которая с моей точки зрения довольно сомнительна с точки зрения скорости разработки, особенно при введении новых людей в проект. ну, дак это целая платформа. Понятно, что её нужно знать чтобы быстро писать. Альтернатив то нету. Без платформы, с нуля быстро писать никак не получится(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 13:33 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
mage.lanТоже очень спорное утверждение. Я, например стараюсь в повторяющихся элементах использовать не более одного селектора или не использовать их совсем. Когда начинаешь оперировать с 10к элементами дома на странице - разница ощутима. Ничего спорного нет. Стилевые селекторы нужны, чтобы навешивать стиль. Если нужна функциональность, либо заведи отдельный класс селекторов с префиксом js- (например, js-open-modal, js-collapse...), либо вообще отдельные атрибуты. Мухи отдельно, котлеты отдельно. И сразу видно, что на элемент что-то навешано, просто тупо по названиям классов или по атрибутам. Не надо думать и гадать, ванговать и стучать по хрустальному шару. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2016, 17:57 |
|
||
|
делегаты и общая философия
|
|||
|---|---|---|---|
|
#18+
RosivSencha вообще отдельная тема, которая с моей точки зрения довольно сомнительна с точки зрения скорости разработки, особенно при введении новых людей в проект. С точки зрения скорости разработки, на Sencha можно замутить приложуху за месяц усилиями трёх-четырёх программистов, с функциональностью, которую с нуля за то же время не запилят и десять профессионалов. И можно в любое время вводить в команду специалистов на Sencha. Это конечно не значит, что Sencha не имеет проблем, но для определённых классов задач, это один из наилучших выборов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2016, 18:01 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39352770&tid=1444874]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 177ms |

| 0 / 0 |
