LINUX.ORG.RU

[Django][Ajax] Бест практисис


0

1

Изначально:

  • На странице есть <div class=«comments»>...</div> с комментариями.
  • К этому блоку привязан pollForComments, который делает ajaxGet с параметрами {comment_object=x, after=y}.
  • Если к этому объёкту есть новые комметарии, view возвращает {result='OK', comments=comments}.
  • comments в ответе содержит комментарии отрендеренные по шаблонам, которые используются для отрисовки самой страницы. То есть достаточно просто comments.appendTo($(«div.comments»)).
  • Если результат pollForComment == OK, ставим pollForComments в таймаут на перезапуск. В противном случае показываем ошибку и больше не перезапускаем.

Дилемма:

Появились страницы, ны которых комментарии отрисовываются другим шаблоном, более простым. Как малой кровью модифицировать pollForComments и view для него, чтоб на таких страницах pollForComments возвращал комментарии, отрисованные другим шаблоном.

Варианты:

  • В ajax запросе передавать ещё и тип отрисовки комментариев. Прим.: 'mini', 'default'.
  • В json возвращать только данные, на клиенте держать нужный шаблон. Очень не хочется дублировать.
  • Ваш вариант, мысли по этому поводу...

Что делать?

P.S.: Трусы снял, бочку сделал.


в json передавать только данные )

stevejobs ★★★★☆ ()
Ответ на: комментарий от SOmni

да мне они оба не нравятся, хотя больше склоняюсь тоже к первому. пост написал в надежде, что может кто-нибудь выдаст простую и гениальную идею, или просто необычное решение.

начинаю подозревать, что проблема не стоит долгих размышлении.

fuxter ()

>Ваш вариант, мысли по этому поводу...

А что тут ещё придумать? Либо рендеринг у клиента, либо на сервере. Оба варианта ты перечислил, выбирай тот, что больше по душе.

anonymous ()
Ответ на: комментарий от anonymous

я вообще очень неумный человек, поэтому спрашиваю. раз выяснилось, что вариантов, вроде как, больше нет, сделаю следующим образом.

добавлю в запрос «type», который может быть «default», «mini» или «json».

fuxter ()

Появились страницы, ны которых комментарии отрисовываются другим шаблоном

Этот способ зависит от того, 1. Можно ли по id камента понять что за страница и 2. Можно ли по id страницы (или другим признакам) понять, какого вида камент нужно нарисовать.

Если тут {comment_object=x, after=y} x и y это идентификаторы, то возвращаемся к п.1 и п.2 ))

Если не понять никак — я бы передавал что-то вроде {comment_object=x, after=y, mini=1|0}, а не дублировал отрисовку на клиенте.

gistart ()
Ответ на: комментарий от gistart

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

уже сделал с передачей параметра отрисовки. мне очень не нравиться, что получается некрасивый js-код. с комментариями идёт форма. для дефолтных комметов используется кастомная шкурка для TinyMCE, для мини комментов просто areatext. привязанный к этим формам код дублируется на 60%. вставлять в пять мест if (window.tinyMCE) тоже не красиво.

вобщем, не хватает мне опыта писать js. буду читать книжки.

спасибо за идею с идею, gistart. возможно позавчера бы и призадумался посерьёзней над ней.

fuxter ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.