Каковы лучшие практики направляющих для шаблонов JavaScript в успокоительных/находчивых контроллерах?

Во-первых, 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 и сторона клиента помощников).

Какие-либо мысли?

8
задан numbers1311407 21 August 2011 в 22:00
поделиться