Page 115 - jQuery для начинающих
P. 115

Поясню для тех кто не прочёл комментарии:
                    options – хранилище настроек виджета для конкретного элемента

                    _create()  –  отвечает  за  инициализацию  виджета  –  тут  должны  происходить
                    изменения в DOM'е, и «вешаться» обработчики событий

                    _destroy() – антипод для _create() – должен подчистить всё, что мы намусорили

                    _setOption(key, value) –  данный  метод  будет  вызван  при  попытке  изменить
                    какие-либо настройки:
                                         $("#my").expose({key:value})

                    Наблюдательный глаз заметит, что все перечисленные методы начинаются со
                    знака  подчёркивания  –  это  такой  способ  выделить  «приватные»  методы,
                    которые  недоступны  для  запуска,  и  если  мы  попытаемся  запустить
                    $('#my').expose('_destroy'),  то  получим  ошибку.  Но  учтите  –  это  лишь
                    договорённость, соблюдайте, её!


                    Для обхода договорённости о приватности можно использовать метод data():

                           $("#my").data("expose")._destroy() // место для смайла «(devil)»


             В данном примере, я постарался задать хороший тон написания виджетов  – я «повесил»
             обработчики  событий  в  namespace,  это  даст  в  дальнейшем  возможность  контролировать
             происходящее без необходимости залазить в код виджета, это «true story».

                    Код описанный в методе  _destroy() – избыточен, т.к. он и так выполняется в
                    публичном destroy(), приведён тут для наглядности.

             А  для  ленивых,  чтобы  не  прописывать  каждый  раз  eventNamespace  в  обработчиках
             событий,  разработчики  добавили  в  версии  1.9.0  два  метода:  _on()  и  _off(),  первый
             принимает два параметра:

                 —  DOM элемент, или селектор, или jQuery объект
                 —  набор обработчиков событий в виде объекта

             Все перечисленные события будут «висеть» в пространстве eventNamespace, т.е. результат
             будет предположительно одинаковым:


                   this._on(this.element, {
                      mouseover:function(event) {

                             console.log("Hello mouse");
                      },
                      mouseout:function(event) {

                             console.log("Bye mouse");
                      }

                   });

                                                                                                        115


                                                                                        www.trk.kg
   110   111   112   113   114   115   116   117   118   119   120