Цитата:
Цитата:
|
можно. к каждому элементу в момент появления его в доме привязываются яваскриптовые компоненты. каждая умеет запускать всплытие события чтобы передавать сообщения предкам. а также умеет следить за тем какие элементы находятся внутри (аналогично form.elements или document.frames), чтобы в случае необходимости брать из них данные или посылать им события. с внешним миром компоненты общаются исключительно посредством событий. на корневой элемент вешается компонента для общения с сервером и другими внешними апи. не пойманное событие приводит к исключению в консоли.
|
а, ну и подцепляются компоненты на основе предикатов. в принципе можно сделать css-предикаты, но это слишком избыточно. вполне хватает имени тэга и аттрибутов.
|
Я думаю много можно хвалить тот или иной фреймворк. Важно понимать что все относительно, и каждый инструмент нужно рассматривать в том или ином контексте. Я думаю самое частое применение javascript - это контентые вебсайты (frontend), где основные необходимости - это манипуляции с DOM, анимация css-свойств, асинхронные запросы и тп. Причем нередко (но все реже) применяется ненавязчивый js. Такие сайты работают при включенном расширении NoScript.
Приведу одну конкретную задачу, которая нарисовалась мне недавно. Имеется набор таблиц. В каждой таблице есть основные строки, и дополнительные, с расширенной информацией. В целях удобства пользования необходимо скрыть расширенные строки и сделать их раскрытие/сворачивание по клику по основной строке. Структура таблицы проста - идет основная строка, две три расширенных, далее основная, снова расширенные и тд. Предлагаю каждому стороннику той или иной либы решить задачу своими методами. Посмотрим у кого выйдет короткий и читаемый код (вопрос производительности тут не стоит, таблиц не тысячи, а меньше десятка). Разметка уже есть и менять ее нельзя. Таблицы помечены классом collapsible. Вот разметка: <table class="collapsible"> <thead> <tr> <th></th> <th>Тип</th> <th>Количество пассажирских мест</th> <th>Дальность полета (км)</th> <th>Вместительность багажника (м³)</th> </tr> </thead> <tbody> <tr> <td><img src="images/planes/ececuliners.png" alt="Execuliners" /></td> <td><span>Execuliners</span></td> <td><span>50</span></td> <td><span>11520</span></td> <td><span>18.1</span></td> </tr> <tr> <td colspan="2">Airbus Corporate Jetliner (ACJ)</td> <td>43</td> <td>11297</td> <td>9.6</td> </tr> <tr> <td colspan="2">Boeing Business Jet (BBJ)</td> <td>50</td> <td>11519</td> <td>17.5</td> </tr> <tr> <td colspan="2">Embraer Lineage 1000</td> <td>19</td> <td>7800</td> <td>18.1</td> </tr> </tbody> <tbody> <tr> <td><img src="images/planes/ececuliners.png" alt="Execuliners" /></td> <td><span>Execuliners</span></td> <td><span>50</span></td> <td><span>11520</span></td> <td><span>18.1</span></td> </tr> <tr> <td colspan="2">Airbus Corporate Jetliner (ACJ)</td> <td>43</td> <td>11297</td> <td>9.6</td> </tr> <tr> <td colspan="2">Boeing Business Jet (BBJ)</td> <td>50</td> <td>11519</td> <td>17.5</td> </tr> <tr> <td colspan="2">Embraer Lineage 1000</td> <td>19</td> <td>7800</td> <td>18.1</td> </tr> </tbody> <tbody> <tr> <td><img src="images/planes/ececuliners.png" alt="Execuliners" /></td> <td><span>Execuliners</span></td> <td><span>50</span></td> <td><span>11520</span></td> <td><span>18.1</span></td> </tr> <tr> <td colspan="2">Airbus Corporate Jetliner (ACJ)</td> <td>43</td> <td>11297</td> <td>9.6</td> </tr> <tr> <td colspan="2">Boeing Business Jet (BBJ)</td> <td>50</td> <td>11519</td> <td>17.5</td> </tr> <tr> <td colspan="2">Embraer Lineage 1000</td> <td>19</td> <td>7800</td> <td>18.1</td> </tr> </tbody> </table> Первый tr внутри каждого tbody - основная строка, последующие - дополнительные, их нужно скрыть. |
а чего это разметку менять нельзя? я так не играю)
|
Скажем, не хватает прав на редактирование документов :) А вот на правку шаблона - хватает.
Да и не наша задача редактировать контент. Контент уже есть, нужно только навесить скрипт. |
> Скажем, не хватает прав на редактирование документов
и в чём проблема их получить? > Да и не наша задача редактировать контент. Контент уже есть, нужно только навесить скрипт. это какая-то сферическая задача в вакууме. высосанные из пальца задачи решать совершенно не интересно. |
Мы находимся на javascript форуме, а не на html, а потому, обсуждать верстку не имеет смысла. Разметка таблицы полостью достаточна для решения задачи. Таблиц может быть много, и никто не собирается придумывать им id или проставляеть классы строкам. Задача была у меня конкретно такая, я привел ее как есть.
Я никого не заставляю ее решать, однако публичный отказ под предлогом высосанности или сферичности кое-о-чем говорит :) Видимо зря я этот пример тут запостил. Очевидно что эту задачу проще всего решить на jQuery (что я и сделал). Либо любая либа позволяющая выборку по селектору (mootools например). В общем бред. Кстати, сначала думал о своей идее - pure js + polyfill's . Фигня все это. С NodeList работать неудобно (через циклы или метод forEach из прототипа массива), стили изменять не очень удобно, dom travelsing тоже неудобный, XHR тож избыточный, для анимации всеравно нужно что-то либное. В общем код получается очень раздутый и писать его долго. Плюс костыли для ие будут весить немало. Я думаю неплохо было бы использовать что-то типа zepto.js, но с подгружаемыми костылями для IE. В общем проще всего пока использовать jQuery. С версией 2.0 она должна заметно похудеть. |
интересно как ты в этом случае будешь менять картинку группы при её разворачивании/сворачивании?
а как будешь выравнивать численные значения по правому краю, текстовые по левому, а флаги по центру? а как будешь реализовывать двухуровневое разворачивание? |
tenshi, не перегибай палку )
Это не интерфейс приложения, это всего лишь табличка с простой инфой, выложенная на вебсайте. Нет тут флагов, не нужна картинка и двухуровневая вложенность. Я понял к чему ты клонишь - тут нужны qooxdoo, ExtJS или dojo. (кстати почему qooxdoo тут не освещается вовсе? помоему достойный фреймворк, даже интереснее ExtJS) Коли была бы такая задача -я бы выбрал что-нибудь их них. Собственно о том и речь. Любой здравый человек гвозди забивает молотком, а шурупы вворачивает шуруповертом. И тут не вопрос предпочтений, тут все зависит от задач. |
Часовой пояс GMT +3, время: 17:30. |