Как / где создать общий метод из кода jquery / erb? - PullRequest
0 голосов
/ 18 декабря 2011

В моем приложении rails 3.1 я добавил шаблоны update.js.erb, create.js.erb и destroy.js.erb для обработки запросов javascript, и все работает отлично. Каждый из них имеет похожие куски кода, которые необходимо вызывать для обновления частей DOM.

...

// recalculate envelope total
$('#<%= "#{dom_id @transaction.envelope} .available" %>').html('<%= "#{formatted_money @transaction.envelope.amount_available}" %>');

Я хочу инкапсулировать эту логику, что такое Rails Way, чтобы сделать это более "СУХИМ"?

То, что я представляю, выглядит примерно так:

<%= recalculate_envelope(@transaction.envelope) %>

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

Спасибо.

1 Ответ

0 голосов
/ 18 декабря 2011

Вы должны поместить метод во вспомогательный класс. Если вы хотите, чтобы метод был доступен всем vews (независимо от того, какой контроллер), вы должны поместить его в класс ApplicationHelper. Для представлений определенного контроллера в определенном вспомогательном классе (например, ProfileHelper, чтобы сделать метод видимым для всех представлений ProfileController).

Таким образом, в вашем классе помощников вы можете реализовать свой метод, например ::

class ApplicationHelper
  def recalculate_envelope(dom_id, envelope)
    "$('##{dom_id envelope} .available').html('#{formatted_money envelope.amount_available}');"
  end
end

И тогда вы можете получить доступ к своему методу в своих представлениях с помощью

<%= recalculate_envelope(@transaction.envelope) %>
...