Как делает рубин на работе направляющих?

Как упоминалось в более раннем ответе, это поведение известно как с именем access по объекту window . Значение атрибута name для некоторых элементов и значение атрибута id для всех элементов становятся доступными как свойства глобального объекта window. Они известны как именованные элементы. Поскольку window является глобальным объектом в браузере, каждый именованный элемент будет доступен как глобальная переменная.

Это было первоначально добавлено Internet Explorer и в конечном итоге было реализовано всеми другими браузерами просто для совместимости с сайтами которые зависят от этого поведения. Интересно, что Gecko (движок рендеринга Firefox) решил реализовать это только в режиме quirks , тогда как другие механизмы рендеринга оставили его в стандартном режиме.

Однако, с Firefox 14, Firefox теперь поддерживает именованный доступ к объекту window в стандартном режиме. Почему они изменили это? Оказывается, все еще есть много сайтов, которые полагаются на эту функциональность в стандартном режиме. Microsoft даже выпустила маркетинговую демонстрацию , которая предотвратила демонстрацию работы в Firefox.

Недавно Webkit рассмотрел противоположное , отменив именованный доступ на window объект только для режима quirks. Они решили против этого по тем же соображениям, что и Гекко.

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

Почему? В этой статье можно суммировать рассуждения о том, почему глобальные переменные являются плохими . Проще говоря, наличие множества дополнительных глобальных переменных приводит к большему количеству ошибок. Допустим, вы случайно набрали имя var и случайно набрали id узла DOM, SURPRISE!

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

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

Как упоминалось в других ответах, используйте document.getElementById, чтобы получить ссылку на узел DOM своим id. Если вам нужно получить ссылку на узел по его атрибуту name, используйте document.querySelectorAll.

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

Если вам интересно, я более подробно расскажу об этом в своем блоге - http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .

33
задан Simone Carletti 17 July 2009 в 15:32
поделиться

10 ответов

Книги "Гибкая веб-разработка с направляющими" и "направляющими Путь" оба довольно хороши. "Pro Активная Запись" идет действительно подробно для Активной Записи, но еще не затрагивает слишком много. Railscasts подкаста иногда просто использует волшебство, но иногда это объясняет, что действительно продолжается. Различные блоги такой как Искусство Миссии могут войти что Ваш поиск.

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

22
ответ дан 27 November 2019 в 18:02
поделиться

Существует две области здесь, которые могут быть исследованы отдельно:

  1. Общие понятия (которые включают шаблоны разработки, общие принципы отношения как DRY и CoC или даже гибкость и т.д.), так как они - принципы позади многих проектных решений в направляющих. Любое из этих понятий может быть изучено независимо от направляющих (так как они - основные понятия программирования). Хорошо иметь, по крайней мере, некоторое понимание их прежде, чем вырыть немного глубже. Существует много источников о таких общих принципах по всей сети (сайт вышеупомянутого Martin Fowler является одним из лучших источников для схватывания таких понятий).

  2. путь направляющие реализует эти понятия в свой корпус. Существуют, снова, две вещи иметь в виду здесь. Так как направляющие в большой степени используют функции его родительского языка, крайне важно понять особенности Ruby (такие как mixins и много динамических функций Ruby). Последняя вещь понять , как направляющие используют эти функции, т.е. как она разломана на классы и модули, сколько из ее функций динамично создается на выполнении и так далее. С этой целью я настоятельно рекомендую книге Ruby для направляющих от David A. Black (который является точно о Ruby, его особенностях и способе, которым направляющие используют их). В то время как эта книга могла бы немного устареть, я думаю, что это все еще неоценимо в своем содержании.

13
ответ дан 27 November 2019 в 18:02
поделиться

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

ActiveRecord в направляющих основан на Martin Fowler Активный Рекордный шаблон . Это - в основном ORM (объектно-реляционный картопостроитель). Это даже не действительно настолько сложно, насколько ORMs идут. Персистентность Java с В спящем режиме , имеет хороший обзор общих понятий ORM.

9
ответ дан 27 November 2019 в 18:02
поделиться

Этот мог бы соответствовать здесь хорошо также-> http://railsforphp.com/

7
ответ дан 27 November 2019 в 18:02
поделиться

Это - вид тангенциального ответа на Ваш вопрос, но я также произошел из разработки PHP к Ruby/направляющим dev, и это был большой переход для меня. Как PHP devs, мы привыкли входить в основные элементы, к говорить, и не препятствоваться смотреть под капотом.

дизайном, направляющие являются черным квадратом. Вы, как предполагается, изучаете направляющие, почти как сам язык. Это - новый образ мыслей сети dev, особенно с точки зрения dev PHP, хотя эта идея весьма характерна для программирования в целом.

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

5
ответ дан 27 November 2019 в 18:02
поделиться

У Jamis Buck есть хорошая серия" Под Капотом " статьи о его блог , которые покрывают некоторые аспекты внутренностей направляющих.

5
ответ дан 27 November 2019 в 18:02
поделиться

"Волшебство" в направляющих включает method_missing и понятие метапрограммирование . Dave Thomas из Прагматически настроенные Программисты созданный ряд экранные демонстрации на метапрограммировании Ruby .

PHP имеет несколько эквивалентную функцию, вызванную __call , и PHP 5.3 представил __callstatic . Вы могли бы смотреть на тех, а также искать Google "php метапрограммирование" некоторый материал чтения по реализации подобного Направляющим поведения в PHP.

4
ответ дан 27 November 2019 в 18:02
поделиться

Я нашел этот сайт хорошей стартовой ссылкой:

http://www.tutorialspoint.com/ruby-on-rails-2.1/index.htm

Это принимает MySQL в своих примерах.

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

4
ответ дан 27 November 2019 в 18:02
поделиться

рубиновое волшебство метапрограммирования в направляющих: взгляд на книги Rappin "Профессиональные направляющие" и Ediger "Усовершенствованные направляющие", в дополнение к Черному "Ruby для направляющих", упомянутых выше

Соглашения о присвоении имен, важен:

http://rails.wincent.com/wiki/Rails_conventions

http://www.softiesonrails.com/2007/10/18/ruby-101-naming-conventions

1
ответ дан 27 November 2019 в 18:02
поделиться

If you really want to understand Rails, read the source for the bit of Rails that you want.

/Library/Ruby/Gems/1.8/gems/ on OSX or freeze rails and have access to it in your RAILS_ROOT/vendor/ directory

0
ответ дан 27 November 2019 в 18:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: