2013-05-18 3 views
1

Ищу практику, которая является наиболее целесообразным с точки зрения кодирования практикиСлишком много форм на странице - это вопрос

У меня есть комментарий системы, которая для каждого комментария, вы можете ответить. Это приводит меня к нескольким вариантам на реализацию этого (предполагает, бэкенд уже создан)

  1. Когда пользователь нажимает «reply», Аякс обжигает, получая соответствующий частичный (включая знак authenitcation и т.д.), и он вставляет что в соответствующем месте
  2. у меня есть скрытые формы для каждого комментария, и нажав reply будет просто сделать его видимым
  3. Я использую JavaScript для создания формы на лету, когда пользователь нажмет ответ и вставить его в соответствующий DIV где был получен ответ, был получен ответ

Моих проблем с каждым

1 - Это вызывает запросы, задержка и я не уверен, что Аякс нужен здесь

для 2 - Слишком многих форм на странице .. Представьте себе, тысячи комментариев так что для каждого комментарий будет форма, которая выглядит более или менее то же самое

для 3 - я не знаю, смогу ли я создать маркер подлинности на клиенте

форма должна выглядеть как-то

 <form accept-charset="UTF-8" action="comments/3/reply" data-remote="true" method="post"> 
    <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"> 
<input name="authenticity_token" type="hidden" value="J0/asxkDH....vdlKLOUuQ9/TAxACWnZKdwy+c="></div> 
        <textarea id="comment" name="comment" class="tae" style="overflow: hidden;"></textarea> 
        <input name="commit" type="submit" value="Send"> 
    </form> 

ответ

2

Я встретил подобный случай раньше, и я закончил решение Ajax, которое похоже на ваш # 1.

Для # 2, да, существует слишком много форм, даже если они скрыты. Мне это не нравится.

Для # 3, я думал использовать шаблон JS, который является популярным стилем в Backbone. Но в то время я не нашел зрелого и современного решения для шаблонов jQuery. В этом случае у меня также не было достаточно времени, поэтому я сдался.

add: Для authenticity_token в # 3, я не тестировал это, но я не думаю, что это будет проблемой, если шаблон формы уже выведен в DOM с готовым маркером. Они предназначены для одного и того же пользователя и того же типа объекта. Нам нужно только изменить идентификатор объекта или другие незначительные вещи. Одна вещь, которую нужно заметить, - это сделать перезагрузить шаблон Ajax после успешного выполнения запроса Ajax.

Я считаю, что # 1 в порядке. Не будет слишком много запросов Ajax. Пользователи будут запрашивать форму только тогда, когда она им нужна, и задержка слишком минимальна для уведомления. Я даже установил sleep для повышения эффекта загрузки. Кроме того, Basecamp также использует Ajax для визуализации динамических вещей.

P.S. Спасибо, что Леон пересмотрел мою грамматику :)