Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JavaScript работа с ASP.NET компонентами 
:(
    Опции темы
PashaPash
Дата 2.4.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 7
Всего: 49



Цитата(Любитель @  2.4.2009,  16:40 Найти цитируемый пост)
Да. Именно так. И это нормально. http://en.wikipedia.org/wiki/Unobtrusive_JavaScript

По ссылке нет ничего насчет выноса в отдельный файл. Там есть только про разделение разметки и JS. - вполне достижимо, именно для этого и сущесвует ClientScriptManager.
Цитата(Любитель @  2.4.2009,  16:40 Найти цитируемый пост)
А так - давай и CSS делать гибким (читай - динамически генерируемым или заинлайненным). Зачем хардкодить? С js - тоже самое. Привязка к ид-шникам/классам это нормально. 

CSS не подразумевает привязку к конкретной структуре страницы - он не требует существования элементов с определенными ID.

В случае JS код подписки в window.onload явно требует существования всех элементов, на которые он ссылается. Т.е. вместо уменьшения связности между разметкой и скриптом и разделения концепций (ради чего Unobtrusive JavaScript и существует) ты получаешь строгую привязку скрипта к конкретной странице - те же .., только в профиль.

Чем тебя не устраивает стандартный подход - JS в отдельном файле, код подписки и html раздельно в aspx? 


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 2.4.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(PashaPash @  2.4.2009,  17:41 Найти цитируемый пост)
CSS не подразумевает привязку к конкретной структуре страницы - он не требует существования элементов с определенными ID.

Эээ.. если не использовать селекторы по ид-шнику - то да. Или селекторы по ид-шнику зря придумали?! Классы в js также используются (всмысле селекторы по классам). Просто селекторы по ид-шникам в настоящий момент гораздо быстрей работают. Надо выбирать разумно.

Цитата(PashaPash @  2.4.2009,  17:41 Найти цитируемый пост)
В случае JS код подписки в window.onload явно требует существования всех элементов, на которые он ссылается.

Тут несколько не так. Если мы хотим создать конкретную кнопку, делающую какую-то операцию - привязываемя по ид-шнику. Добавить всем элементам плавающий тултип - проходим по всем элементам с title. Добавить валидацию емейла - проходим по всем инпутоам, у которых есть класс email. И т. д.

Цитата(PashaPash @  2.4.2009,  17:41 Найти цитируемый пост)
ты получаешь строгую привязку скрипта к конкретной странице - те же .., только в профиль.

Если у меня есть кнопка, специфичная для этой страницы - я в любом случае буду писать скрипт под неё. Получить универсальный js на все случаи жизни невозможно smile Надо разумно выносить слои абстракции.

Цитата(PashaPash @  2.4.2009,  17:41 Найти цитируемый пост)
Чем тебя не устраивает стандартный подход - JS в отдельном файле, код подписки и html раздельно в aspx?  

Этот подоход стандартен только для ASP .Net WebForms. Не устраивает:
1. Лишними сложностями - код с вечными <%= ClientID %> менее поддерживаемый всё-таки.
2. Разбуханием html-а. У меня на страницы меняются данные, но есть тысяча стабильных наскриптованных функций - я предпочту их закешировать однажды. Кстати по этой причине ужасным (без напильника) является реализация мёрджинга сриптов в ASP .Net AJAX.



Это сообщение отредактировал(а) Любитель - 2.4.2009, 18:04


--------------------
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 2.4.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 7
Всего: 49



Можно и тут обсудить - пока в пределах темы.
Цитата(Любитель @  2.4.2009,  18:03 Найти цитируемый пост)

Эээ.. если не использовать селекторы по ид-шнику - то да. Или селекторы по ид-шнику зря придумали?! Классы в js также используются (всмысле селекторы по классам). Просто селекторы по ид-шникам в настоящий момент гораздо быстрей работают. Надо выбирать разумно.

Селектор по ID в CSS работает при отсутствии элементов - он просто применяет стиль к 0 элементов  - это нормальное поведение. CSS не предъявляет требований существования элемента.
В JS нет селекторов по ID в том же смысле - там есть поиск элемента по ID, который должен вернуть ровно 1 результат (в случае подписывания на событие). Если он не нашел вообще ничего - ошибка. Если нашел больше 2-х элементнов - тоже ошибка. Т.е. это кусок кода жестко связан с разметкой, и от выноса его со страницы ты ничего не получишь, кроме лишних пролем с отладкой.
Цитата(Любитель @  2.4.2009,  18:03 Найти цитируемый пост)

Тут несколько не так. Если мы хотим создать конкретную кнопку, делающую какую-то операцию - привязываемя по ид-шнику. Добавить всем элементам плавающий тултип - проходим по всем элементам с title. Добавить валидацию емейла - проходим по всем инпутоам, у которых есть класс email. И т. д.

Цитата(Любитель @  2.4.2009,  18:03 Найти цитируемый пост)
Если у меня есть кнопка, специфичная для этой страницы - я в любом случае буду писать скрипт под неё. Получить универсальный js на все случаи жизни невозможно smile Надо разумно выносить слои абстракции.

ASP.NET не мешает тебе искать по типам, аттрибутам и т.д. Если ты хочешь создать конкретную кнопку - ты должен упомянуть ее в 2-х местах (в случае Unobtrusive). Зачем разносить эти 2 места по разным файлам? 
Цитата(Любитель @  2.4.2009,  18:03 Найти цитируемый пост)
1. Лишними сложностями - код с вечными <%= ClientID %> менее поддерживаемый всё-таки.
2. Разбуханием html-а. У меня на страницы меняются данные, но есть тысяча стабильных наскриптованных функций - я предпочту их закешировать однажды. Кстати по этой причине ужасным (без напильника) является реализация мёрджинга сриптов в ASP .Net AJAX.

1. ClientID проявляется только в случае naming container-а на странице - грида, репитера - когда без генерации ClientID ты получишь неуникальные ID в HTML. А от двух неуникальных ID толку никакого - ты не сможешь обработать оба элемента.
2. Так и вынеси эти тысячи скриптов в отдельный файл и наслаждайся кэшированием. Оставь в aspx только подписку. 


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 2.4.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(PashaPash @  2.4.2009,  19:07 Найти цитируемый пост)
В JS нет селекторов по ID в том же смысле - там есть поиск элемента по ID, который должен вернуть ровно 1 результат (в случае подписывания на событие). Если он не нашел вообще ничего - ошибка. Если нашел больше 2-х элементнов - тоже ошибка. Т.е. это кусок кода жестко связан с разметкой, и от выноса его со страницы ты ничего не получишь, кроме лишних пролем с отладкой.

Этой работой занимаются фреймворки smile

Цитата(PashaPash @  2.4.2009,  19:07 Найти цитируемый пост)
ClientID проявляется только в случае naming container-а на странице - грида, репитера - когда без генерации ClientID ты получишь неуникальные ID в HTML. А от двух неуникальных ID толку никакого - ты не сможешь обработать оба элемента.

asp:Content, user-controls если я не туплю дают "порчу" ид-шника.

Цитата(PashaPash @  2.4.2009,  19:07 Найти цитируемый пост)
ASP.NET не мешает тебе искать по типам, аттрибутам и т.д. Если ты хочешь создать конкретную кнопку - ты должен упомянуть ее в 2-х местах (в случае Unobtrusive). Зачем разносить эти 2 места по разным файлам? 

А зачем в случае CSS мы так делаем?! Потому что разметка отдельно, оформление отдельно, динамика отдельно.

Цитата(PashaPash @  2.4.2009,  19:07 Найти цитируемый пост)
Оставь в aspx только подписку.  

Всё равно разбухание smile А так - собственно большинство так и делают с ASP .Net WebForms.

Я, кстати, в итоге не понял - подписку по классам ты предлагаешь выносить или нет?


--------------------
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 2.4.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 7
Всего: 49



Цитата(Любитель @  2.4.2009,  19:17 Найти цитируемый пост)
Этой работой занимаются фреймворки

Мегафреймворк jQuery находит по id один элемент, даже если на странице их несколько. Сомневаюсь что остальные фреймворки справляются лучше. Да и w3c-ный стандарт требует уникальности.
Цитата(Любитель @  2.4.2009,  19:17 Найти цитируемый пост)

asp:Content, user-controls если я не туплю дают "порчу" ид-шника.

Ага, дают - но они "портят" его предсказуемо, каждый раз одинаково и уникально в пределах страницы.
Цитата(Любитель @  2.4.2009,  19:17 Найти цитируемый пост)
А зачем в случае CSS мы так делаем?! Потому что разметка отдельно, оформление отдельно, динамика отдельно.

В CSS оформлению все равно, что у тебя в разметке - оно пассивно. А скрипты - активны. А при выносе подписки - еще и явно налагают требования на разметку. Т.е. вместо разделения ты получаешь наоборот - жесткую связь.
Цитата(Любитель @  2.4.2009,  19:17 Найти цитируемый пост)
Я, кстати, в итоге не понял - подписку по классам ты предлагаешь выносить или нет? 

Да ес-но, какой смысл ее оставлять? На странице оставить только подписку по ID.


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 2.4.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(PashaPash @  2.4.2009,  20:20 Найти цитируемый пост)
Да ес-но, какой смысл ее оставлять? На странице оставить только подписку по ID.

Ну это уже как раз разброс smile Мне удобней, чтобы было в одном месте.

Цитата(PashaPash @  2.4.2009,  20:20 Найти цитируемый пост)
Мегафреймворк jQuery находит по id один элемент, даже если на странице их несколько. Сомневаюсь что остальные фреймворки справляются лучше. Да и w3c-ный стандарт требует уникальности.

Само собой. Я не о том говорил - я говорил о проверке на то есть элемен или нет в первую очередь.

Цитата(PashaPash @  2.4.2009,  20:20 Найти цитируемый пост)
В CSS оформлению все равно, что у тебя в разметке - оно пассивно. А скрипты - активны. А при выносе подписки - еще и явно налагают требования на разметку. Т.е. вместо разделения ты получаешь наоборот - жесткую связь.

Семантику пассивности/активности не понял smile Разметка пасивна - зачем в неё вмешивать активные скрипты? smile 

Цитата(PashaPash @  2.4.2009,  20:20 Найти цитируемый пост)
Ага, дают - но они "портят" его предсказуемо, каждый раз одинаково и уникально в пределах страницы.

Ээ.. Ты же не предлагаешь тем не менее использовать явно полученные ид-шники?! Даже учитывая, что мы о них "вроде знаем".

Короче - думаю мы мнение друг друга поняли smile Как таковой дальнейший спор не очень осмысленен smile Я, конечно, не против - но просто аргументация уже закончилась smile Единственное - будет время, найду какие-нибудь ссылки удачноубедительные по unobtrusive js smile


--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.