Skip to content

Instantly share code, notes, and snippets.

@gumayunov
Created March 12, 2012 12:48
Show Gist options
  • Save gumayunov/2021614 to your computer and use it in GitHub Desktop.
Save gumayunov/2021614 to your computer and use it in GitHub Desktop.

Body-класс

Каждая страница устанавливает свой класс для элемента body в зависимости от controller, action и layout. Например для страницы вывода заявок на БВ в админке это было бы

<body class="admin page-ownership_requests page-ownership_requests-index">

Структура файлов

- app/
  - coffeescripts/
    - initializers/
      admin.js
      frontend.js
      frontend_reviews.js
    - widgets/
      - chat/
      - ownership/
        - businesses/
          binding.coffee
      expandeable_list.coffee
    - models/
- public/
  - javascripts/
    - app/
    - lib/

Initializers

Код, отвечающий за инициализацию виджетов на странице через поиск контейнеров и передачу их в конструкторы виджетов. При этом селекторы для контейнеров могут учитывать и body-класс. Для выполнения кода при наличие определенных контейнеров удобно использовать функцию each.

Масса этого кода разбита по файлам для удобства подключения на страницы (assets.yml или assets-pipeline). Пример:

$('body.frontend').each ->
     
  $('.bo-request-business-select.widget').each (i, container)->
    new Views.Ownership.BusinessSelect container,
      afterBind ->
        window.location = "/ownership/requests/#{@request_id}/edit"
$('body.admin').each ->
     
  $('.bo-request-business-select.widget').each (i, container)->
    new Views.Ownership.BusinessSelect container,
      afterBind ->
        window.location = "/admin/ownership_requests/#{@request_id}/edit"

Widgets

Виджет - класс, принимаютщий в конструктор некоторый DOM-елемент (контейнер) и опции. Он навешивает обработчики событий, добавляет элементы, обрабатывает шаблоны, работает с моделями. Виджет завязан на верстку содержимого контейнера, поэтому, чтобы обозначить блоки, с которыми работают виджеты необходимо использовать класс widget

# Поиск и привязка бизнеса к заявке
#
# Container attributes:
#   business_id - идентификатор бизнеса к которому привязывается бизнес.

class Widgets.Ownership.BusinessSelect
  constructor(@container, options) ->
    @request_id = @container.data("request_id")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment