Skip to content
This repository has been archived by the owner on Dec 3, 2020. It is now read-only.

Nali.Notice

4urbanoff edited this page Jan 28, 2015 · 5 revisions

Это заранее созданная модель предназначеная для уведомления пользователя информационными сообщениями. По умолчанию настроены три типа уведомлений - info, warning и error, соответственно модель имеет три вида NoticeInfo, NoticeWarning и NoticeError, шаблоны которых генерируются при создании приложения и располагаются в директории app/client/templates/notice, а их стили в app/client/stylesheets/notice. Различия их заключаются в визуальном оформлении, которое Вы легко можете настроить "под себя".

Внутренее устройство

Модель и её виды ничем не отличаются от обычных

Nali.Model.extend Notice:

  initialize: ->
    @::::expand Notice: @
    # расширяем объект Nali свойством Notice ссылающимся на эту модель

  prepare: ( params ) ->
    params = message: params if typeof params is 'string'
    params
    # если переданный параметр строка, модифицируем её до объекта
    # вида {message: 'Hello World'}, если объект - оставляем как есть

  addMethods: ->
    for name of @views
      do ( name ) =>
        @[ name ] = ( params ) => @new( @prepare params ).show name
    # добавляем одноименные методы для показа видов


Nali.View.extend
  # создаем три вида для модели Notice
  NoticeInfo:
    onShow: -> @hide 3000
    # после показа скрываем вид с задержкой 3 сек.

  NoticeWarning:
    onShow: -> @hide 3000

  NoticeError:
    onShow: -> @hide 3000

Показ уведомлений

Чтобы показать пользователю информационное сообщение, в любом месте клиентской части приложения при наступления необходимых условий можно вызвать необходимый метод:

@Notice.info 'Hello World'
# покажет уведомление типа info, по умолчанию
# уведомление скроется через 3 секунды
# данный вызов равноценен вызову
@Notice.info message: 'Hello World'

При этом создается экземпляр модели Notice со свойством message равным 'Hello World', у которого вызывается метод showInfo() без аргументов, т.е. представление вида вставляется в контейнер приложения. Аналогичная ситуация обстоит с видами warning и error.

Настройка уведомлений

Если помимо свойства message, Вы решили отображать еще и заголовок title, то Вам необходимо отредактировать шаблон уведомления, например так:

<b>{ @title }</b>
<i>{ @message }</i>

и вызывать метод info следующим образом:

@Notice.info title: 'Information', message: 'Hello World'

Если Вам необходимо изменить контейнер куда вставляются уведомления, а также cделать так, чтобы пользователь сам закрывал уведомления, нужно отключить автоскрытие и добавить кнопку закрыть в шаблон, для этого создадим файл app/client/javascripts/views/notice/info.js.coffee, в котором переопределим настройки по умолчанию:

Nali.View.NoticeInfo.expand

  insertTo: -> '.noticesContainer'
    # определим контейнер для вставки

  onShow: ->
    # переопределим дефолтный метод, этим мы отключим
    # автоскрытие, вызываемое в нем по умолчанию

добавим в шаблон app/client/templates/notice/info.html ссылку "закрыть"

<p>{ @message }</p>
<a href="@hide">Закрыть</a>

Добавление собственных типов уведомлений

Если вам необходимо создание еще одного типа уведомлений, просто добавьте и настройте его вид, например

$ nali view NoticeNewMessages

создаст файлы

  • app/client/javascripts/views/notice/new_messages.js.coffee - сам вид
  • app/client/stylesheets/notice/new_messages.css.sass - его стили
  • app/client/templates/notice/new_messages.html - шаблон

настраиваем вид

Nali.View.extend NoticeNewMessages:

  onShow: -> @hide 5000
    # скрываем уведомление через 5 секунд

редактируем шаблон

<p>У вас новые сообщения { @count }</p>

настраиваем стили, затем где необходимо показываем уведомление

@Notice.newMessages count: 5

Вызов уведомлений с серверой части

С серверной части можно отправлять информационные сообщения следующим образом

client.info message: 'Hello World'
# на клиенте произойдет вызов 
@Notice.info message: 'Hello World'

# аналогично вызываются warning и error
client.warning message: 'Warning'
client.error message: 'Error'

Вызвать любое нестандартное уведомление можно так

client.notice :newMessages, count: 5
# на клиенте произойдет вызов 
@Notice.newMessages count: 5