Во-первых, 2 общих (основных) подхода:
# returning from some FoosController method
respond_to do |format|
# 1. render the out a json representation
format.json { render :json => @foo }
# 2. render an RJS template, say update.js.erb
format.js { render }
end
# in update.js.erb
$('#foo').html("<%= escape_javascript(render(@foo)) %>")
Это очевидно простые случаи, но я хотел проиллюстрировать то, о чем я говорю. Я полагаю, что это также случаи, ожидаемые респондентом по умолчанию в направляющих 3 (или названный действием шаблон по умолчанию или звонящий to_# {формат} на ресурсе.)
С 1, у Вас есть общая гибкость на стороне представления без беспокойства о шаблоне, но необходимо управлять DOM непосредственно с помощью JavaScript. Вы теряете доступ к помощникам, partials, и т.д.
С 2, у Вас есть partials и помощники в Вашем распоряжении, но Вы связываетесь с одним шаблоном (по умолчанию, по крайней мере). Все Ваши представления, которые выполняют вызовы JS к FoosController, используют тот же шаблон, который не точно гибок.
1.) Выйдите из partials/helpers, в котором я нуждаюсь в JavaScript заранее, затем вставляя их в страницу после, с помощью строковой замены для адаптации их в соответствии с возвращенными результатами (подрезкий звук на имя, идентификатор, и т.д.).
2.) Поместите логику представления в шаблоны. Например, поиск конкретного элемента DOM и выполнение одной вещи, если это существует, другой, если это не делает.
3.) Поместите логику в контроллер для рендеринга различных шаблонов. Например, в полиморфном принадлежит туда, где обновление можно было бы назвать или для комментариев/нечто или для сообщений/нечто, представив commnts/foos/update.js.erb по сравнению с posts/foos/update.js.erb.
Я использовал все их (и вероятно другие, о которых я не думаю). Часто в том же приложении, которое приводит к запутывающему коду. Есть ли лучшие практики для этого вида вещи? На достаточно общий пример использования кажется, что Вы хотели бы назвать контроллеры через действия Ajax от различных взглядов и ожидать, что разные вещи произойдут (не имея необходимость делать утомительные вещи как выход и замена строки partials и сторона клиента помощников).
Какие-либо мысли?