Сохранение состояния на диск
Сервер держит все данные в памяти. Если он упадёт или перезапустится, все темы и комментарии будут потеряны.
Расширьте его функциональность с тем, чтобы он сохранял данные на диске и автоматически загружал их при перезагрузке. Не волнуйтесь насчёт эффективности, сделайте самый простой вариант.
Обнуление полей комментариев
Общая перерисовка всех тем работает неплохо, потому что нет различия между узлом DOM и его заменой, когда они одинаковые. Но есть исключения. Если вы начнёте печатать что-либо в поле комментария к теме в одном окне браузера, а затем в другом окне добавите комментарий к этой теме, поле в первом окне будет перерисовано, и будет потеряно и его содержимое, и фокус.
При горячем обсуждении, когда несколько человек добавляют комментарии к одной теме, это очень раздражало бы. Можете ли вы придумать, как избежать этого?
Улучшенные шаблоны
Большинство шаблонизаторов делают больше, чем просто заполняют шаблоны строками. По меньшей мере они позволяют добавлять в шаблоны условия, аналогично оператору if
, и повторения частей шаблона, аналогично циклам.
Если б мы могли повторять кусок шаблона для каждого элемента массива, второй шаблон ("comment"
) был бы нам не нужен. Мы могли просто сказать шаблону "talk"
, чтобы он повторялся для массива, содержащегося в свойстве comments
, и создавал бы узлы, которые являются комментариями, для каждого элемента массива.
Это могло бы выглядеть так:
<div>
<div template-repeat="comments">
<span>{{author}}</span>: {{message}}
</div>
</div>
Идея в следующем: когда при обработке шаблона встречается атрибут template-repeat
, повторяющим шаблон, код проходит циклом по массиву, содержащемуся в свойстве, названном так же, как этот атрибут. Контекст шаблона (переменная values
в instantiateTemplate
) при работе цикла показывала бы на текущий элемент массива так, чтобы метку искали бы в объекте comment
, а не в теме.
Перепишите instantiateTemplate
так, чтобы она это умела, и потом поменяйте шаблоны, чтоб они использовали эту возможность, и уберите лишние строки для создания комментариев из функции drawTalk
.
Как бы вы организовали условное создание узлов, чтобы можно было опускать части шаблона, если определённое значение равно true
или false
?
А кто без скрипта?
Если кто-нибудь зайдёт на наш сайт с отключённым JavaScript, они получат сломанную неработающую страницу. Это не очень-то хорошо.
Некоторые разновидности веб-приложений не получится сделать без JavaScript. Для других не хватает финансирования или терпения, чтобы заботиться о посетителях без скриптов. Но для посещаемых страниц считается вежливым поддержать таких пользователей.
Попробуйте придумать способ, которым бы веб-сайт по обмену опытом можно было бы сделать работающим без JavaScript. Придётся ввести автоматические обновления страниц, а перезагружать странички пользователям придётся по старинке. Но было бы неплохо уметь просматривать темы, создавать новые и отправлять комментарии.
Не заставляю вас его реализовывать. Достаточно описать возможное решение. Кажется ли вам такой вариант сайта более или менее элегантным, чем тот, что мы уже сделали?