2011-12-18 1 views
0

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

... 

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

Я хочу инкапсулировать эту логику, что такое Rails-способ сделать это более «СУХОЙ»?

Что я представляю себе что-то вроде этого:

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

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

Спасибо.

ответ

0

Вы должны поместить метод в класс-помощник. Если вы хотите, чтобы метод был доступен для всех 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) %> 
+0

Спасибо! Я не понимал, что это было так просто, но я думаю, что так работают помощники для HTML-шаблонов, поэтому почему бы и для js тоже? –

Смежные вопросы