Компания, в которой я работаю, недавно перешла с Rails 2 на Rails 3, за тот же период мы также перешли с rjs на jquery.Мы внедряем новый шаблон, предназначенный для улучшения повторного использования вида.Я буду использовать edit / update в качестве примера, чтобы проиллюстрировать новый и старый способ выполнения AJAX в проекте:
A. Старый способ - Редактировать шаблон действия не отображает клиенту какую-либо специфичную для обновления логику JavaScript.Шаблон обновления отображает как HTML-контент, так и действие (замените элемент).это очень похоже на подход RJS, но в jQuery.
Плюсы:1. HTML-контент AJAX и код JavaScript, который выполняет манипуляции с DOM, организованы в одном файле .rb, просты в обслуживании.2. Просмотр спецификаций позволяет проверить, правильно ли отображался код JS для манипулирования DOM при обновлении ответа AJAX.
Минусы:1. Поскольку html-контент и js-код связаны и предполагают определенную структуру DOM на целевой странице, повторное использование на другой странице сложнее.
B. Новый способ - шаблон действия обновления для запроса AJAX возвращает только документ JSON, который содержит экранированный HTML-контент.js-код, который управляет DOM, отображается из шаблона действия редактирования и прослушивания виртуального события AJAX: успех / ошибка.Таким образом, контент и поведение разделены.
Плюсы:
- AJAX html-контент и javascript (поведение) отделены друг от друга, поэтому контент можно настраивать и манипулировать немного по-разному на разных страницах.
Минусы:
HTML-контент и JS-код теперь организованы в 2 разных файлах (JS в шаблоне действия редактирования, HTML-контент в шаблоне действия обновления), его сложнее поддерживать, чем раньше.
Мы больше не можем легко тестировать поведение представления - шаблон обновления теперь отображает только HTML-контент AJAX, но код, управляющий им, находится в другом представлении(edit).
Поскольку ответ находится в формате JSON, мы больше не можем использовать формат, чтобы определить, ожидает ли клиент обёртывание html в JSON или просто вызов API JSON.
Это то, чему я научился до сих пор, мне интересно, может ли кто-то с большим опытом в этой теме пролить некоторый свет на этот вопрос - какой подход лучше в целом и как их улучшить.
Спасибо!
-Сяотянь