Добре, просто зателефонуйте мені на зберігача склепу на весь некролог, який я роблю, але я ніколи не відчував, як справжня цінність цього була правильно зрозуміла. Історично стверджувалося, що "ненав'язливий JavaScript" або, не дозволяючи JS вийти з HTML за допомогою вбудованих атрибутів обробника подій HTML та тегів сценаріїв, які максимально не посилаються на файл, є величезним ключовим елементом:
- Проблеми доступності
- SEO
- І прогресивне вдосконалення
ЛАЖЕ! (ну, тепер би вони були)
Правда в тому, що ви можете зробити технічно нав'язливий JavaScript і все-таки витягнути вищевказані три елементи. Якщо ви не будували HTML-вміст динамічно, це було великим SEO-ні-ні в день.
Але зупинись і подумай ... Про ВАС!
Дійсно, велика вигода, головна і найпомітніша вигода від збереження розлуки завжди були прямою вигодою, яку розробник отримує від цього. Ви можете мати стільки обробників подій, скільки вам потрібно, для того ж елемента html для тієї ж події, що і зручно. Це означає, що якщо тег з class="some_class"
завжди отримує певну поведінку, але також отримує деяку бонусну поведінку, коли він знаходиться всередині id="bonus_behavior"
діва, нам не потрібно починати возитись з логікою всередині нашого дозволеного обробника подій, щоб відгалужуватися на це. Ми можемо просто додавати або не додавати обробники в залежності від контексту.
Легко читати занадто
Ще одна перевага - розбірливість. Це було особливо критичним, коли інструменти браузера складалися з ексклюзивного повідомлення про помилку IE, яке повідомляло вам, що щось не так, [object]
але IMO, це все ще велика справа. CSS тут, JS там і HTML - це місце, де вони і сервер зустрічаються. Оскільки всі ці речі збираються в одному місці, має сенс покластися на гачки (ідентифікатори, класи та ієрархію), щоб створити шар абстракції, який використовується для підключення до HTML.
IMO, чим більше ви МОЖЕТЕ тримати HTML, CSS та JS, тим простіше не просто читати, а й змінювати та розуміти, що відбувається. Я бачу порожній div з "динамическим_комбо_бокс" як клас, і я гарно уявляю, що щось робить фантазійний вибір, який завантажує дані динамічно. Я маю на увазі, як знайти, що в JS та CSS, і якщо я зіткнуся з класом у цих питаннях, я буду гарно уявляти, про що йдеться, і як це знайти в HTML.
Занадто просто зробити рівний слойпер
І звичайно, розбірливість має тенденцію йти на руку з ремонтом. Коли ви просто робите речі безпосередньо, скидаючи все це в теги скриптів, де трапляється відповідний HTML, настільки часто, як ні, людям стає простіше просто вирізати та вставити цей скрипт у HTML іншої сторінки, над якою вони працюють, коли вони хочуть подібної функціональності, а значить, зараз у вас є одне, що, швидше за все, з часом стане двома набридливо схожими, але не на 100% схожими речами, поведінка яких з часом може стати проблематичною, оскаржуючи очікування і вимагаючи додавання більш безглуздих розгалужень для обробки винятків, для чого потрібно інший не став.
Таким чином, таке поводження з цими гачками HTML заохочує розумне використання коду. Якщо вам потрібна гілка поведінки для альтернативної реалізації, ви просто перейдете до тієї ж функції і обробіть її там за допомогою ієрархії HTML або, можливо, атрибут даних, що ініціює деяку альт-поведінку. Це одна зупинка для тих, хто хоче зрозуміти, як працюють елементи користувальницького інтерфейсу певного типу, а ті, які відверто лінуються-в-поганому - нарізати та вставити типи, зроблять правильне / більш-ремонтоване, лише тому, що це найпростіше зробити це зараз, і це найкращий спосіб зробити ремонтопридатність. Зробити це найпростішим "духом", що можна зробити навіть для того, хто не міг хвилюватись, чи то через паніку чи апатію.
А як щодо 2014 року?
Це може бути легітимним моментом, що в сучасних односторінкових програмах деякі з цих стихійних речей, можливо, не слід приклеювати так догматично, як це було, але повірте мені, коли я кажу, що я не думаю, що я єдиний, хто було продано на ньому, оскільки це врешті-решт полегшує роботу. Я лінивий (сподіваюся) здебільшого-добрий. Мені подобається, коли мені потрібно змінити лише речі в одному місці, щоб отримати зміни в усьому додатку, коли мені потрібно лише шукати в одному місці, щоб зрозуміти, що таке помилка, і коли мені легко зрозуміти, що це за чорт що відбувається і як найкраще повторно використовувати цей код, щоб зробити щось дуже схоже.
Це добре, як добре розділити БД або рівень даних. Це в кінцевому підсумку - чому я не зробив це, що економити час, як взяти всі п’ять хвилин, щоб прати білизну ввечері, а не витрачати 10 хвилин на замерзання ваших боксерів і проведення перевірки параноїдального запаху наступного ранку.
Для мене саме ті егоїстичні мотивації завжди були головним моментом, чому я тримаюсь не просто ненав’язливого JS, але поділу стилю / поведінки / змісту стосується, наскільки це можливо, навіть те, що ЩО-Freaking-WG робить їх найчеснішим заглушувати ці проблеми зрозумілим дивовижним та крутим / зручним способом.
Тепер, коли всі роблять СПА і майже нерозумно намагаються переконати бізнес, що нам слід піклуватися про людей, які працюють без JS (доступність тепер може бути оброблена контентом, створеним JS), схоже, що наступне покоління розробників JS піклується менше з цього приводу, окрім IMO, все ще є виграш, і це переважно для вас, розробника, який пише та підтримує цей матеріал. І справді, ця виграш завжди повинна була бути найбільш підкресленою, але ніколи не була з якихось причин, тому що в кінцевому рахунку виграє вам, а також продукту щасливою випадковістю через те, що простіше налаштувати / змінити / налагодити.
Це колись гаразд?
Ну так, я думаю. У одноразовому додатку, що викидається на конкурс, чи щось можливо. Але я б все одно це робив лише тому, що мені це звично, і це насправді не важче зробити.