.parent().parent().parent().parent().find(...).parent().parent().parent().parent()
.btn-group
%button.dropdown-toggle
%ul.dropdown-menu{:data => {:attribute => 'wheel'}}
%li
.dropdown-element
$ ->
container = $('div.container') # вынес чтобы не отрабатывалось по каждому клику
$('button.dropdown-toggle').parent().find('div.dropdown-element').click ->
element = $(@)
element.parents('div.btn-group').find('button.dropdown-toggle').text(@textContent)
attr = element.data('attribute')
container_data = container.data(attr) || new Object
change = element.data('change')
if (place = element.data('place'))
container_data[place] ||= new Object
container_data[place][change] = element.data(change)
else
container_data[change] = element.data(change)
container.data(attr, container_data)
container.trigger('change')
{} — это круто, спасибо
1. Да мы же уже давно оптимизировали $(this), мы уже используем всего 1 раз. $(this) можно наравне с переменными использовать в чейне, если $(this) используется 1 раз. Присвоение переменной $(this) не избавляет нас от $(this).
2. '.js-attribute' — класс, а экземпляров класса много
у меня 10 елементов откликнутся на .js-attribute, как быть?
Если бы айди был бы уникальным, я бы искал по айди, и поиск по айди — обход всего дома. Опять не то, как быть? Я выше привел пример. у каждого элемента hendle-рится event .click, что с того, что папа будет называться js-front_left, у меня их 10, нужен именно брат, а братьев удобнее всего искать через parent().find я ды давно это назвал brother('object')
3. Присвоение похожим элементам общий атрибут более затратная задача с точки зрения программиста, чем чейнинг. Общие аттрибуты засоряют код больше, чем чейнинг.
Так зачем же избавляться от чейнинга?