2011-06-06 1 views
3

Компания, с которой я работаю, недавно обновилась с Rails 2 до Rails 3, за тот же период мы также перенесли с rjs на jquery. Мы принимаем новый образец, который призван улучшить повторное использование вида. Я буду использовать редактирование/обновление в качестве примера, чтобы проиллюстрировать новый способ и старый способ сделать AJAX в проекте:Rails 3 UJS Ajax шаблон/стратегия, какая из них лучше?

А. Старого способом - шаблон действия Edit не оказывает никакого обновление конкретного яваскрипта логики к клиенту. Шаблон обновления отображает как содержимое html, так и действие (замените элемент). это очень похоже на подход RJS, но в jQuery.

Плюсы:
1. AJAX html-контент и код javascript, который выполняет манипуляции с DOM, организованы в один и тот же файл .rb, прост в обслуживании.
2. Просмотр спецификаций может проверить, был ли обработан JS-код правильной DOM в обновленном ответе AJAX.

Против:
1. Поскольку содержимое html и js-код связаны и предполагают определенную структуру DOM на целевой странице, ее сложно использовать повторно на другой странице.

B. Новый способ - шаблон действия обновления для запроса AJAX возвращает только документ JSON, содержащий скрытое содержимое html. js-код, который управляет DOM, отображается из шаблона действия редактирования и прослушивания AJAX: виртуального события success/error. Таким образом, контент и поведение разделены.

За:

  1. АЯКС контент HTML и Javascript (поведение) разъединены, так что содержимое может быть изменен и манипулировать несколько иначе на другой странице.

Минусы:

  1. Контента HTML и JS кода теперь организованы в 2 различных файлов (JS в шаблоне действия редактирования содержимого HTML в шаблоне действия обновления), это труднее поддерживать, чем раньше.

  2. Мы не можем более легко тестировать поведение представления - шаблон обновления теперь отображает только содержание AJAX html, но код, который его манипулирует, находится в другом представлении (редактировать).

  3. Поскольку ответ находится в формате JSON, мы больше не можем использовать формат, чтобы определить, ожидает ли клиент html, завернутый в JSON, или только вызов JSON API.

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

Спасибо!

-Xiaotian

ответ