Компания, с которой я работаю, недавно обновилась с 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. Таким образом, контент и поведение разделены.
За:
- АЯКС контент HTML и Javascript (поведение) разъединены, так что содержимое может быть изменен и манипулировать несколько иначе на другой странице.
Минусы:
Контента HTML и JS кода теперь организованы в 2 различных файлов (JS в шаблоне действия редактирования содержимого HTML в шаблоне действия обновления), это труднее поддерживать, чем раньше.
Мы не можем более легко тестировать поведение представления - шаблон обновления теперь отображает только содержание AJAX html, но код, который его манипулирует, находится в другом представлении (редактировать).
Поскольку ответ находится в формате JSON, мы больше не можем использовать формат, чтобы определить, ожидает ли клиент html, завернутый в JSON, или только вызов JSON API.
Это вещи, которые я узнал до сих пор, мне интересно, может ли кто-то, у кого больше опыта в этой теме, пролить свет на это - какой подход лучше в целом и как улучшить их.
Спасибо!
-Xiaotian