Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2010, 14:41
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

паттерн наблюдатель
Хотелось бы выслушать объективную критику по поводу реализации паттерна "наблюдатель"
выставляю основной класс.

тудухи в комментах можно считать вопросами.
спасибо!

/**
* класс "наблюдатель" реализующий работу с кастомными событиями
* @todo подумать над названием класса
* @todo решить проблему с пространством имен Н: событие switchTab может быть у разных объектов
*/
function observer()
{
  this.events = new Array();
  
  /**
  * добавляет наблюдателя
  * @param {string} objName имя объекта наблюдателя
  * @param {string} eventName событие которое отслеживаем
  */
  this.addObserver = function(objName, eventName)
  {
    if (!this.events[eventName])
    {
      this.events[eventName] = new Array();
    }
    
    this.events[eventName].push(objName)
  }
  
  /**
  * оповещает всех наблюдателей о произошедшем событии
  * @param {string} eventName название события
  */
  this.fireEvent = function(eventName)
  {
    var f = eventName.charAt(0).toUpperCase();
    var eventNameUpperFirst = f + eventName.substr(1, eventName.length-1);
    
    for(var i = 0; i < this.events[eventName].length; i++)
    {
      window[this.events[eventName][i]]['on' + eventNameUpperFirst]();
    }
  }
  
  /**
  * удаляет наблюдателя
  * @param {string} objName имя объекта наблюдателя
  * @param {string} eventType событие которое отслеживаем
  */
  this.removeObserver = function(objName, eventType)
  {
    for(var i = 0; i < this.events[eventName].length; i++)
    {
      if (this.events[eventName][i] == objName)
      {
        this.events[eventName][i] = null;
      }
    }
  }
}

var observer = new observer();
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2010, 15:33
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от jetli13
var observer = new observer();
Оригинально.

Сообщение от jetli13
* @todo подумать над названием класса
С большой буквы.

Сообщение от jetli13
* @todo решить проблему с пространством имен Н: событие switchTab может быть у разных объектов
Зачем? У каждого объекта должен быть свой набор событий, поэтому они не будут пересекаться.

Я не понял, только глобальные функции можно обработчиками сделать чтоли?
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2010, 15:49
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Kolyaj,
Цитата:
Оригинально.
в чем подвох ? )
Цитата:
С большой буквы.
в проекте уже так сложилось хотя в целом согласен
Цитата:
У каждого объекта должен быть свой набор событий
Спорно... но в целом принцип ясен, спасибо
Цитата:
только глобальные функции можно обработчиками сделать чтоли?
нет, обработчики сидят внутри подписавшихся объектов. Сами же объекты должны быть в window
window[this.events[eventName][i]]['on' + eventNameUpperFirst]();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли паттерн для решения задачи jetli13 Общие вопросы Javascript 6 04.08.2010 14:20