Фишки Rails. Некоторые аспекты использования моделей
Сегодня вспомнил очередной раз про всё это и решил записать.
В программе: именованные скоупы, колбэки, опции отношений, 'includes' и has_many :through
Сегодня вспомнил очередной раз про всё это и решил записать.
В программе: именованные скоупы, колбэки, опции отношений, 'includes' и has_many :through
В ситуации, когда нужно, чтобы ваша textarea росла в высоту вместе с контентом, заставить её так себя вести можно только javascript'ом. Вероятно, это потребует создания скрытого блока, копирования в него содержимого textarea, высчитывания высоты и присвоения значения этой высоты вашей textarea, причём вся эта радость - при каждом нажатии клавиши. Жуть!
Но есть другой вариант: использовать вместо textarea обычный div с атрибутом contenteditable.
Turbolinks в Rails - это отличный способ ускорить загрузку страниц. Суть фишки - в том, чтобы вместо полной перезагрузки страницы при нажатии на ссылку подгружать только изменившуюся часть. Как я выяснил, пока делал этот блог, подход имеет и подводный камень. При обновлении части страницы не происходит события ready, из-за чего такие вещи, как highlight.js, отвечающий тут за подсветку синтаксиса, не обрабатывают обновлённый контент.
Решением проблемы является использование событий, добавляемых Turbolinks'ом:
page:before-changea Turbolinks-enabled link has been clicked (see below for more details)page:fetchstarting to fetch a new target pagepage:receivethe page has been fetched from the server, but not yet parsedpage:changethe page has been parsed and changed to the new version and on DOMContentLoadedpage:updateis triggered whenever page:change is PLUS on jQuery's ajaxSucess, if jQuery is available (otherwise you can manually -trigger it when calling XMLHttpRequest in your own code)page:loadis fired at the end of the loading process.
Т.о. для того, чтобы подсветка синтаксиса работала при переходах между страницами я использую такой код (warning: coffeescript sintax!):
$(document).on 'page:change', ->
$('pre code').each (i, e) ->
hljs.highlightBlock(e)