Немного подглядывая вокруг кода, вот предположение:
Следующий контейнер уведомлений всегда находится в разметке представления:
<div id="notify-container"> </div>
Этот контейнер уведомлений скрыт по умолчанию и заполняется JavaScript при определенных обстоятельствах. Может содержать любое количество сообщений.
Если пользователь не вошел в систему
Постоянство : файлы cookie используются для отслеживания того, отображается сообщение или нет.
Сгенерированный на стороне сервера код в представлении :
Я думаю, что stackoverflow показывает только одно сообщение, если вы не вошли в систему. Следующий код вставляется в представление:
<script type="text/javascript">
$(function() { notify.showFirstTime(); });
</script>
Метод javascript showFirstTime () просто определяет, показывать ли «Вы здесь впервые?» сообщение, основанное на том, был ли установлен cookie или нет. Если нет cookie, сообщение показывается. Если пользователь предпринимает какие-либо действия, файл cookie устанавливается, и сообщение не будет отображаться в будущем. Функция nofity.showFirstTime () обрабатывает проверку на наличие cookie.
Если пользователь вошел в систему
Постоянство : База данных используется для отслеживания того, было ли сообщение показано или нет.
Сгенерированный на стороне сервера код в представлении :
Когда запрашивается страница, серверный код проверяет базу данных, чтобы увидеть, какие сообщения необходимо отобразить. Затем код на стороне сервера внедряет сообщения в формате json в представление и вызывает вызов javascript для showMessages ().
Например, если я вошел в представление, я вижу следующее в разметке в SO:
<script type="text/javascript">
1
2 var msgArray = [{"id":49611,"messageTypeId":8,"text":"Welcome to Super User! Visit your \u003ca href=\"/users/00000?tab=accounts\"\u003eaccounts tab\u003c/a\u003e to associate with our other websites!","userId":00000,"showProfile":false}];
3 $(function() { notify.showMessages(msgArray); });
4
</script>
Таким образом, код на стороне сервера либо вводит код для вызова метода "showFirstTime", если пользователь не вошел в систему, либо вводит сообщения и вызывает "showMessages" для вошедшего в систему пользователя.
Подробнее о коде на стороне клиента
Другим ключевым компонентом является модуль JavaScript "notify", который Picflight деминифицировал (вы можете сделать то же самое, используя yslow для firebug). Модуль notify обрабатывает заполнение div уведомлений на основе сгенерированного javascript на стороне сервера.
Не авторизован, на стороне клиента
Если пользователь не вошел в систему, то модуль обрабатывает события, когда пользователь Х выходит из уведомления или переходит в FAQ, создавая файл cookie. Он также определяет, отображать ли первое сообщение, проверяя наличие cookie.
Вход в систему на стороне клиента
Если пользователь вошел в систему, модуль уведомлений добавляет все сообщения, сгенерированные сервером, в раздел уведомлений. Он также, скорее всего, использует ajax для обновления базы данных, когда пользователь отклоняет сообщение.